diff --git a/.gitattributes b/.gitattributes index 7497efbe7..4cba22bfb 100644 --- a/.gitattributes +++ b/.gitattributes @@ -16,3 +16,7 @@ # under the License. * text=auto eol=lf + +# CLI fixtures include significant CRLF bytes inside quoted CSV fields. +cpp/test/tools/e2e/fixtures/** -text +cpp/test/tools/e2e/golden/** -text diff --git a/.github/workflows/unit-test-cpp-msvc.yml b/.github/workflows/unit-test-cpp-msvc.yml index 9939301c1..27fe7e908 100644 --- a/.github/workflows/unit-test-cpp-msvc.yml +++ b/.github/workflows/unit-test-cpp-msvc.yml @@ -160,3 +160,12 @@ jobs: -Dtsfile.dependency.source=BUNDLED \ -Dspotless.skip=true \ clean verify + + - name: Upload CLI E2E failure results + if: failure() + uses: actions/upload-artifact@v7 + with: + name: cli-e2e-${{ matrix.os }}-${{ strategy.job-index }} + path: cpp/target/build/test/cli-e2e-results/ + if-no-files-found: ignore + retention-days: 14 diff --git a/.github/workflows/unit-test-cpp.yml b/.github/workflows/unit-test-cpp.yml index 7a0605c8b..f15c9f1d2 100644 --- a/.github/workflows/unit-test-cpp.yml +++ b/.github/workflows/unit-test-cpp.yml @@ -152,3 +152,12 @@ jobs: -Denable.lzma2=ON \ -Dtsfile.dependency.source=BUNDLED \ clean verify + + - name: Upload CLI E2E failure results + if: failure() + uses: actions/upload-artifact@v7 + with: + name: cli-e2e-${{ matrix.os }}-${{ strategy.job-index }} + path: cpp/target/build/test/cli-e2e-results/ + if-no-files-found: ignore + retention-days: 14 diff --git a/cpp/test/CMakeLists.txt b/cpp/test/CMakeLists.txt index 3c3da441b..cc54906ab 100644 --- a/cpp/test/CMakeLists.txt +++ b/cpp/test/CMakeLists.txt @@ -355,3 +355,34 @@ if(WIN32) else() gtest_discover_tests(TsFile_Test) endif() + +# The same file-driven CLI suite also runs against an installed executable. +# Keep test-data preparation and golden comparisons independent of libtsfile. +if (BUILD_TOOLS) + if (CMAKE_VERSION VERSION_LESS "3.12") + find_package(PythonInterp 3.9 REQUIRED) + set(TSFILE_E2E_PYTHON "${PYTHON_EXECUTABLE}") + else () + find_package(Python3 3.9 COMPONENTS Interpreter REQUIRED) + set(TSFILE_E2E_PYTHON "${Python3_EXECUTABLE}") + endif () + add_dependencies(TsFile_Test tsfile_cli) + add_test(NAME CliE2E + COMMAND "${TSFILE_E2E_PYTHON}" + "${CMAKE_CURRENT_SOURCE_DIR}/tools/e2e/run_cli_e2e.py" + --cli $ + --expected-version "${TsFile_CPP_VERSION}" + --output-dir "${CMAKE_CURRENT_BINARY_DIR}/cli-e2e-results") + set_tests_properties(CliE2E PROPERTIES TIMEOUT 1800) + if (WIN32 AND TSFILE_BUILD_SHARED) + # The build-tree DLL lives in lib/, separate from the CLI. + # Installed-package verification uses its own normal runtime setup. + string(REPLACE ";" "\\;" _TSFILE_E2E_SYSTEM_PATH "$ENV{PATH}") + set_tests_properties(CliE2E PROPERTIES ENVIRONMENT + "PATH=$\\;${_TSFILE_E2E_SYSTEM_PATH}") + endif () + add_test(NAME CliE2ERunnerTest + COMMAND "${TSFILE_E2E_PYTHON}" -m unittest discover + -s "${CMAKE_CURRENT_SOURCE_DIR}/tools/e2e" + -p test_runner.py) +endif () diff --git a/cpp/test/tools/cli_args_test.cc b/cpp/test/tools/cli_args_test.cc index 580623d4e..a28773932 100644 --- a/cpp/test/tools/cli_args_test.cc +++ b/cpp/test/tools/cli_args_test.cc @@ -23,72 +23,6 @@ #include -#include "cli/run_cli.h" - -TEST(RunCliTest, VersionFlagPrintsVersionAndReturnsOk) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"--version"}, out, err); - EXPECT_EQ(code, 0); - EXPECT_NE(out.str().find("tsfile"), std::string::npos); - EXPECT_TRUE(err.str().empty()); -} - -TEST(RunCliTest, VersionMustAppearByItself) { - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"cat", "--version", "data.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("--version"), std::string::npos) << err.str(); -} - -TEST(RunCliTest, TopLevelHelpMustAppearByItself) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"--help", "cat"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("--help"), std::string::npos) << err.str(); -} - -TEST(RunCliTest, CommandHelpMustAppearByItself) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"cat", "--help", "data.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("--help"), std::string::npos) << err.str(); -} - -TEST(RunCliTest, NoArgsPrintsUsageToErrAndReturnsUsageError) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("Usage"), std::string::npos); -} - -TEST(RunCliTest, UnknownCommandIsUsageError) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"frobnicate", "x.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("Unknown command"), std::string::npos); -} - -TEST(RunCliTest, LeadingOptionBeforeCommandIsClearError) { - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"-f", "ndjson", "meta", "data.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("command must come before options"), - std::string::npos) - << err.str(); -} - TEST(ParseArgsTest, CommandAndFilePositional) { auto p = tsfile_cli::parse_args({"ls", "data.tsfile"}); EXPECT_TRUE(p.error.empty()); @@ -179,29 +113,3 @@ TEST(ParseArgsTest, StdinFlagParsed) { EXPECT_EQ(p.file, "-"); EXPECT_TRUE(p.input_set); } - -TEST(RunCliTest, SelectIsNoLongerKnownCommand) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"select", "x.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("Unknown command"), std::string::npos); -} - -TEST(RunCliTest, SeedOnCatIsUsageError) { - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"cat", "--seed", "7", "x.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("--seed is not supported"), std::string::npos); -} - -TEST(RunCliTest, SampleIsUnknownCommand) { - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"sample", "--offset", "2", "x.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("Unknown command"), std::string::npos); -} diff --git a/cpp/test/tools/cli_internal_test.cc b/cpp/test/tools/cli_internal_test.cc new file mode 100644 index 000000000..5fb806efc --- /dev/null +++ b/cpp/test/tools/cli_internal_test.cc @@ -0,0 +1,275 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 + +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#endif + +#include "cli/run_cli.h" +#include "cli_test_util.h" +#include "commands/commands.h" +#include "commands/statistics.h" +#include "common/config/config.h" +#include "file/local_random_access_read_file.h" +#include "reader/tsfile_reader.h" + +#ifndef TSFILE_CPP_SOURCE_DIR +#define TSFILE_CPP_SOURCE_DIR "." +#endif + +namespace { + +struct TableFixture { + std::string path = tsfile_cli_test::write_table_fixture(); + ~TableFixture() { std::remove(path.c_str()); } +}; + +class FailingMetadataReadFile : public storage::LocalRandomAccessReadFile { + public: + int read(int64_t offset, char* buffer, int32_t size, + int32_t& read_size) override { + ++reads; + if (fail_reads || (fail_at > 0 && (persistent ? reads >= fail_at + : reads == fail_at))) { + failed = true; + fail_reads = persistent; + read_size = 0; + return short_read ? common::E_OK : common::E_FILE_READ_ERR; + } + return LocalRandomAccessReadFile::read(offset, buffer, size, read_size); + } + + bool fail_reads = false; + bool persistent = false; + bool failed = false; + bool short_read = false; + int reads = 0; + int fail_at = 0; +}; + +class FlushFailingStreamBuf : public std::stringbuf { + protected: + int sync() override { return -1; } +}; + +} // namespace + +TEST(CliInternal, FileSummaryPropagatesEveryMetadataReadFailure) { + for (bool internal_indexes : {false, true}) { + TableFixture fixture; + if (internal_indexes) { + const uint32_t saved = + common::g_config_value_.max_degree_of_index_node_; + ASSERT_EQ(storage::set_max_degree_of_index_node(2), common::E_OK); + std::remove(fixture.path.c_str()); + fixture.path = tsfile_cli_test::write_tag_filter_fixture(); + ASSERT_EQ(storage::set_max_degree_of_index_node(saved), + common::E_OK); + } + tsfile_cli::ParsedArgs args; + args.file = fixture.path; + int first_read = 0; + int last_read = 0; + { + auto* source = new FailingMetadataReadFile; + ASSERT_EQ(source->open(fixture.path), common::E_OK); + storage::TsFileReader reader; + ASSERT_EQ( + reader.open( + std::unique_ptr(source)), + common::E_OK); + first_read = source->reads + 1; + tsfile_cli::FileSummary summary; + std::ostringstream err; + ASSERT_EQ( + tsfile_cli::collect_file_summary(args, reader, summary, err), 0) + << err.str(); + EXPECT_EQ(summary.device_count, internal_indexes ? 3 : 1); + EXPECT_GT(summary.series_count, 0); + last_read = source->reads; + } + for (bool persistent : {false, true}) { + for (bool short_read : {false, true}) { + for (int fail_at = first_read; fail_at <= last_read; + ++fail_at) { + SCOPED_TRACE(::testing::Message() + << internal_indexes << ":" << persistent << ":" + << short_read << ":" << fail_at); + auto* source = new FailingMetadataReadFile; + ASSERT_EQ(source->open(fixture.path), common::E_OK); + storage::TsFileReader reader; + ASSERT_EQ( + reader.open( + std::unique_ptr( + source)), + common::E_OK); + source->fail_at = fail_at; + source->persistent = persistent; + source->short_read = short_read; + tsfile_cli::FileSummary summary; + summary.file = "unchanged"; + summary.device_count = -1; + std::ostringstream err; + EXPECT_EQ(tsfile_cli::collect_file_summary(args, reader, + summary, err), + 2); + EXPECT_TRUE(source->failed); + EXPECT_EQ(summary.file, "unchanged"); + EXPECT_EQ(summary.device_count, -1); + EXPECT_NE(err.str().find("failed to read"), + std::string::npos) + << err.str(); + } + } + } + } +} + +TEST(CliInternal, TableStatsPropagateEveryMetadataReadFailure) { + TableFixture fixture; + const uint32_t saved = common::g_config_value_.max_degree_of_index_node_; + ASSERT_EQ(storage::set_max_degree_of_index_node(2), common::E_OK); + std::remove(fixture.path.c_str()); + fixture.path = tsfile_cli_test::write_tag_filter_fixture(); + ASSERT_EQ(storage::set_max_degree_of_index_node(saved), common::E_OK); + tsfile_cli::ParsedArgs args; + args.file = fixture.path; + args.table = "t1"; + int first_read = 0; + int last_read = 0; + for (int fail_at = 0; fail_at <= last_read; ++fail_at) { + if (fail_at > 0 && fail_at < first_read) { + continue; + } + for (bool persistent : {false, true}) { + for (bool short_read : {false, true}) { + SCOPED_TRACE(::testing::Message() + << persistent << ":" << short_read << ":" + << fail_at); + auto* source = new FailingMetadataReadFile; + ASSERT_EQ(source->open(fixture.path), common::E_OK); + storage::TsFileReader reader; + ASSERT_EQ( + reader.open( + std::unique_ptr(source)), + common::E_OK); + // Match run_cli's model validation before command dispatch. + std::vector> schemas; + std::vector> devices; + ASSERT_EQ(reader.get_all_table_schemas(schemas), common::E_OK); + ASSERT_EQ(reader.get_all_devices(devices), common::E_OK); + first_read = source->reads + 1; + source->fail_at = fail_at; + source->persistent = persistent; + source->short_read = short_read; + std::ostringstream out; + std::ostringstream err; + const int ret = tsfile_cli::cmd_stats( + args, reader, tsfile_cli::OutputFormat::kCsv, out, err); + if (fail_at == 0) { + ASSERT_EQ(ret, 0) << err.str(); + EXPECT_TRUE(err.str().empty()) << err.str(); + EXPECT_NE(out.str().find("table,t1,dev_a,s1,INT64,1,"), + std::string::npos); + EXPECT_NE(out.str().find("table,t1,dev_b,s1,INT64,2,"), + std::string::npos); + EXPECT_NE(out.str().find("table,t1,dev_c,s1,INT64,1,"), + std::string::npos); + last_read = source->reads; + ASSERT_GE(last_read, first_read); + } else { + EXPECT_EQ(ret, 2); + EXPECT_TRUE(source->failed); + EXPECT_TRUE(out.str().empty()) << out.str(); + EXPECT_NE(err.str().find("failed to read"), + std::string::npos) + << err.str(); + } + } + } + } +} + +TEST(CliInternal, ModelDetectionPropagatesMetadataReadErrors) { + TableFixture fixture; + using Command = + int (*)(const tsfile_cli::ParsedArgs&, storage::TsFileReader&, + tsfile_cli::OutputFormat, std::ostream&, std::ostream&); + const Command commands[] = {tsfile_cli::cmd_ls, tsfile_cli::cmd_schema, + tsfile_cli::cmd_meta, tsfile_cli::cmd_stats, + tsfile_cli::cmd_count, tsfile_cli::cmd_head, + tsfile_cli::cmd_cat}; + for (size_t i = 0; i < sizeof(commands) / sizeof(commands[0]); ++i) { + for (bool persistent : {false, true}) { + SCOPED_TRACE(::testing::Message() << i << ":" << persistent); + auto* source = new FailingMetadataReadFile; + ASSERT_EQ(source->open(fixture.path), common::E_OK); + storage::TsFileReader reader; + ASSERT_EQ( + reader.open( + std::unique_ptr(source)), + common::E_OK); + source->fail_reads = true; + source->persistent = persistent; + tsfile_cli::ParsedArgs args; + args.file = fixture.path; + std::ostringstream out; + std::ostringstream err; + EXPECT_EQ(commands[i](args, reader, tsfile_cli::OutputFormat::kCsv, + out, err), + 2); + EXPECT_TRUE(source->failed); + EXPECT_TRUE(out.str().empty()) << out.str(); + EXPECT_NE(err.str().find("failed to read"), std::string::npos) + << err.str(); + } + } +} + +TEST(CliInternal, SkillShipsRequiredReferenceFiles) { + const std::string root = std::string(TSFILE_CPP_SOURCE_DIR) + + "/tools/skills/tsfile-cli/references/"; + const std::vector refs = {"commands.md", "errors.md", + "examples.md"}; + for (const auto& ref : refs) { + std::ifstream in(root + ref); + ASSERT_TRUE(in.good()) << ref; + std::ostringstream body; + body << in.rdbuf(); + EXPECT_NE(body.str().find("tsfile-cli"), std::string::npos) + << root + ref; + } +} + +TEST(CliInternal, StdoutFlushFailureReturnsRuntimeError) { + TableFixture f; + FlushFailingStreamBuf buffer; + std::ostream out(&buffer); + std::ostringstream err; + EXPECT_EQ(tsfile_cli::run_cli({"cat", "-f", "csv", f.path}, out, err), 3); + EXPECT_NE(err.str().find("failed to read rows"), std::string::npos) + << err.str(); +} diff --git a/cpp/test/tools/cli_requirements_test.cc b/cpp/test/tools/cli_requirements_test.cc deleted file mode 100644 index 438f7507e..000000000 --- a/cpp/test/tools/cli_requirements_test.cc +++ /dev/null @@ -1,1252 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - -#include -#include -#include -#include -#ifndef _WIN32 -#include -#include -#endif - -#include "cli/run_cli.h" -#include "cli_test_util.h" -#include "commands/commands.h" -#include "commands/statistics.h" -#include "common/config/config.h" -#include "file/local_random_access_read_file.h" -#include "reader/tsfile_reader.h" - -#ifndef TSFILE_CPP_SOURCE_DIR -#define TSFILE_CPP_SOURCE_DIR "." -#endif - -namespace { - -struct TableFixture { - std::string path = tsfile_cli_test::write_table_fixture(); - ~TableFixture() { std::remove(path.c_str()); } -}; - -struct MultiTableFixture { - std::string path = tsfile_cli_test::write_multi_table_fixture(); - ~MultiTableFixture() { std::remove(path.c_str()); } -}; - -class FailingMetadataReadFile : public storage::LocalRandomAccessReadFile { - public: - int read(int64_t offset, char* buffer, int32_t size, - int32_t& read_size) override { - ++reads; - if (fail_reads || (fail_at > 0 && (persistent ? reads >= fail_at - : reads == fail_at))) { - failed = true; - fail_reads = persistent; - read_size = 0; - return short_read ? common::E_OK : common::E_FILE_READ_ERR; - } - return LocalRandomAccessReadFile::read(offset, buffer, size, read_size); - } - - bool fail_reads = false; - bool persistent = false; - bool failed = false; - bool short_read = false; - int reads = 0; - int fail_at = 0; -}; - -bool file_exists(const std::string& path) { - std::ifstream in(path.c_str()); - return in.good(); -} - -std::string read_file(const std::string& path) { - std::ifstream in(path.c_str(), std::ios::binary); - std::ostringstream buf; - buf << in.rdbuf(); - return buf.str(); -} - -std::string global_usage() { - return "Usage: tsfile-cli [options]\n" - "Commands: ls schema meta stats count sketch head cat export " - "write\n" - "Formats: table ndjson csv\n" - "Common read options:\n" - " -f, --format table|ndjson|csv output format (default: " - "table)\n" - " -d, --device select one tree-model device\n" - " -t, --table select one table-model table\n" - " -m, --measurements repeat for FIELD projection\n" - " -n, --limit N max rows for head/cat\n" - " --offset N skip N matching rows\n" - " --start inclusive lower time bound\n" - " --end inclusive upper time bound\n" - "Export options:\n" - " -o, --output single-object export target\n" - " --type table|ndjson|csv export file type\n" - " --force replace a regular output file\n" - "Write options:\n" - " --table target table name\n" - " --tag STRING declare a TAG column\n" - " --field declare a FIELD column\n" - " -i, --input input CSV file\n" - " --stdin read CSV from stdin\n" - " -o, --output destination .tsfile\n" - " -v, --verbose report write details to stderr\n" - " -h, --help print help\n" - " --version print version\n"; -} - -} // namespace - -TEST(CliRequirements, FileSummaryPropagatesEveryMetadataReadFailure) { - for (bool internal_indexes : {false, true}) { - TableFixture fixture; - if (internal_indexes) { - const uint32_t saved = - common::g_config_value_.max_degree_of_index_node_; - ASSERT_EQ(storage::set_max_degree_of_index_node(2), common::E_OK); - std::remove(fixture.path.c_str()); - fixture.path = tsfile_cli_test::write_tag_filter_fixture(); - ASSERT_EQ(storage::set_max_degree_of_index_node(saved), - common::E_OK); - } - tsfile_cli::ParsedArgs args; - args.file = fixture.path; - int first_read = 0; - int last_read = 0; - { - auto* source = new FailingMetadataReadFile; - ASSERT_EQ(source->open(fixture.path), common::E_OK); - storage::TsFileReader reader; - ASSERT_EQ( - reader.open( - std::unique_ptr(source)), - common::E_OK); - first_read = source->reads + 1; - tsfile_cli::FileSummary summary; - std::ostringstream err; - ASSERT_EQ( - tsfile_cli::collect_file_summary(args, reader, summary, err), 0) - << err.str(); - EXPECT_EQ(summary.device_count, internal_indexes ? 3 : 1); - EXPECT_GT(summary.series_count, 0); - last_read = source->reads; - } - for (bool persistent : {false, true}) { - for (bool short_read : {false, true}) { - for (int fail_at = first_read; fail_at <= last_read; - ++fail_at) { - SCOPED_TRACE(::testing::Message() - << internal_indexes << ":" << persistent << ":" - << short_read << ":" << fail_at); - auto* source = new FailingMetadataReadFile; - ASSERT_EQ(source->open(fixture.path), common::E_OK); - storage::TsFileReader reader; - ASSERT_EQ( - reader.open( - std::unique_ptr( - source)), - common::E_OK); - source->fail_at = fail_at; - source->persistent = persistent; - source->short_read = short_read; - tsfile_cli::FileSummary summary; - summary.file = "unchanged"; - summary.device_count = -1; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::collect_file_summary(args, reader, - summary, err), - 2); - EXPECT_TRUE(source->failed); - EXPECT_EQ(summary.file, "unchanged"); - EXPECT_EQ(summary.device_count, -1); - EXPECT_NE(err.str().find("failed to read"), - std::string::npos) - << err.str(); - } - } - } - } -} - -TEST(CliRequirements, TableStatsPropagateEveryMetadataReadFailure) { - TableFixture fixture; - const uint32_t saved = common::g_config_value_.max_degree_of_index_node_; - ASSERT_EQ(storage::set_max_degree_of_index_node(2), common::E_OK); - std::remove(fixture.path.c_str()); - fixture.path = tsfile_cli_test::write_tag_filter_fixture(); - ASSERT_EQ(storage::set_max_degree_of_index_node(saved), common::E_OK); - tsfile_cli::ParsedArgs args; - args.file = fixture.path; - args.table = "t1"; - int first_read = 0; - int last_read = 0; - for (int fail_at = 0; fail_at <= last_read; ++fail_at) { - if (fail_at > 0 && fail_at < first_read) { - continue; - } - for (bool persistent : {false, true}) { - for (bool short_read : {false, true}) { - SCOPED_TRACE(::testing::Message() - << persistent << ":" << short_read << ":" - << fail_at); - auto* source = new FailingMetadataReadFile; - ASSERT_EQ(source->open(fixture.path), common::E_OK); - storage::TsFileReader reader; - ASSERT_EQ( - reader.open( - std::unique_ptr(source)), - common::E_OK); - // Match run_cli's model validation before command dispatch. - std::vector> schemas; - std::vector> devices; - ASSERT_EQ(reader.get_all_table_schemas(schemas), common::E_OK); - ASSERT_EQ(reader.get_all_devices(devices), common::E_OK); - first_read = source->reads + 1; - source->fail_at = fail_at; - source->persistent = persistent; - source->short_read = short_read; - std::ostringstream out; - std::ostringstream err; - const int ret = tsfile_cli::cmd_stats( - args, reader, tsfile_cli::OutputFormat::kCsv, out, err); - if (fail_at == 0) { - ASSERT_EQ(ret, 0) << err.str(); - EXPECT_TRUE(err.str().empty()) << err.str(); - EXPECT_NE(out.str().find("table,t1,dev_a,s1,INT64,1,"), - std::string::npos); - EXPECT_NE(out.str().find("table,t1,dev_b,s1,INT64,2,"), - std::string::npos); - EXPECT_NE(out.str().find("table,t1,dev_c,s1,INT64,1,"), - std::string::npos); - last_read = source->reads; - ASSERT_GE(last_read, first_read); - } else { - EXPECT_EQ(ret, 2); - EXPECT_TRUE(source->failed); - EXPECT_TRUE(out.str().empty()) << out.str(); - EXPECT_NE(err.str().find("failed to read"), - std::string::npos) - << err.str(); - } - } - } - } -} - -TEST(CliRequirements, ModelDetectionPropagatesMetadataReadErrors) { - TableFixture fixture; - using Command = - int (*)(const tsfile_cli::ParsedArgs&, storage::TsFileReader&, - tsfile_cli::OutputFormat, std::ostream&, std::ostream&); - const Command commands[] = {tsfile_cli::cmd_ls, tsfile_cli::cmd_schema, - tsfile_cli::cmd_meta, tsfile_cli::cmd_stats, - tsfile_cli::cmd_count, tsfile_cli::cmd_head, - tsfile_cli::cmd_cat}; - for (size_t i = 0; i < sizeof(commands) / sizeof(commands[0]); ++i) { - for (bool persistent : {false, true}) { - SCOPED_TRACE(::testing::Message() << i << ":" << persistent); - auto* source = new FailingMetadataReadFile; - ASSERT_EQ(source->open(fixture.path), common::E_OK); - storage::TsFileReader reader; - ASSERT_EQ( - reader.open( - std::unique_ptr(source)), - common::E_OK); - source->fail_reads = true; - source->persistent = persistent; - tsfile_cli::ParsedArgs args; - args.file = fixture.path; - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(commands[i](args, reader, tsfile_cli::OutputFormat::kCsv, - out, err), - 2); - EXPECT_TRUE(source->failed); - EXPECT_TRUE(out.str().empty()) << out.str(); - EXPECT_NE(err.str().find("failed to read"), std::string::npos) - << err.str(); - } - } -} - -TEST(CliRequirements, MetadataFailurePrecedesModelOptionValidation) { - TableFixture fixture; - const std::string bytes = read_file(fixture.path); - ASSERT_GT(bytes.size(), 17u); - // Keep both magic strings and the metadata-size tail, but remove the - // metadata body. Opening succeeds; the first schema read must fail. - { - std::ofstream file(fixture.path, std::ios::binary | std::ios::trunc); - file.write(bytes.data(), 7); - file.write(bytes.data() + bytes.size() - 10, 10); - } - storage::TsFileReader reader; - ASSERT_EQ(reader.open(fixture.path), common::E_OK); - reader.close(); - for (const std::string& command : - {"ls", "schema", "meta", "stats", "count", "head", "cat"}) { - for (bool table_option : {false, true}) { - if (table_option && command != "head" && command != "cat" && - command != "schema") { - continue; - } - SCOPED_TRACE(command + (table_option ? ":table" : ":auto")); - std::vector args = {command}; - if (table_option) { - args.insert(args.end(), {"-t", "table1"}); - } - args.push_back(fixture.path); - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli(args, out, err), 2); - EXPECT_TRUE(out.str().empty()) << out.str(); - EXPECT_NE(err.str().find("failed to read"), std::string::npos) - << err.str(); - } - } -} - -TEST(CliRequirements, HelpListsExactlyCurrentCommandSurface) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"--help"}, out, err); - EXPECT_EQ(code, 0); - EXPECT_NE(out.str().find( - "ls schema meta stats count sketch head cat export write"), - std::string::npos) - << out.str(); - EXPECT_EQ(out.str().find("sample"), std::string::npos) << out.str(); - EXPECT_TRUE(err.str().empty()); -} - -TEST(CliRequirements, CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples) { - const std::vector commands = { - "ls", "schema", "meta", "stats", "count", - "sketch", "head", "cat", "export", "write"}; - for (const auto& command : commands) { - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli({command, "--help"}, out, err), 0) - << command; - EXPECT_TRUE(err.str().empty()) << command << ": " << err.str(); - EXPECT_NE(out.str().find("Usage: tsfile-cli " + command), - std::string::npos) - << command << ": " << out.str(); - EXPECT_NE(out.str().find("Result fields:"), std::string::npos) - << command << ": " << out.str(); - EXPECT_NE(out.str().find("Examples:"), std::string::npos) - << command << ": " << out.str(); - EXPECT_EQ(out.str().find("Commands:"), std::string::npos) - << command << ": " << out.str(); - } - - std::ostringstream meta_out; - std::ostringstream meta_err; - EXPECT_EQ(tsfile_cli::run_cli({"meta", "--help"}, meta_out, meta_err), 0); - EXPECT_TRUE(meta_err.str().empty()); - EXPECT_NE(meta_out.str().find("Usage: tsfile-cli meta"), std::string::npos) - << meta_out.str(); - EXPECT_NE(meta_out.str().find("Result fields:"), std::string::npos) - << meta_out.str(); - EXPECT_NE(meta_out.str().find("size_bytes,format_version,model"), - std::string::npos) - << meta_out.str(); - EXPECT_NE(meta_out.str().find("Examples:"), std::string::npos) - << meta_out.str(); - EXPECT_EQ(meta_out.str().find("Commands:"), std::string::npos) - << meta_out.str(); - - std::ostringstream write_out; - std::ostringstream write_err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "-h"}, write_out, write_err), 0); - EXPECT_TRUE(write_err.str().empty()); - EXPECT_NE(write_out.str().find("Usage: tsfile-cli write"), - std::string::npos) - << write_out.str(); - EXPECT_NE(write_out.str().find("--field "), std::string::npos) - << write_out.str(); - EXPECT_NE(write_out.str().find("Default: success is silent"), - std::string::npos) - << write_out.str(); - EXPECT_NE(write_out.str().find("Examples:"), std::string::npos) - << write_out.str(); - EXPECT_EQ(write_out.str().find("Commands:"), std::string::npos) - << write_out.str(); -} - -TEST(CliRequirements, SkillShipsRequiredReferenceFiles) { - const std::string root = std::string(TSFILE_CPP_SOURCE_DIR) + - "/tools/skills/tsfile-cli/references/"; - const std::vector refs = {"commands.md", "errors.md", - "examples.md"}; - for (const auto& ref : refs) { - std::ifstream in(root + ref); - ASSERT_TRUE(in.good()) << ref; - std::ostringstream body; - body << in.rdbuf(); - EXPECT_NE(body.str().find("tsfile-cli"), std::string::npos) - << root + ref; - } -} - -TEST(CliRequirements, SampleIsNotACommand) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"sample", "x.tsfile"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("Unknown command"), std::string::npos) - << err.str(); -} - -TEST(CliRequirements, VersionIncludesConcreteBuildMetadata) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"--version"}, out, err); - EXPECT_EQ(code, 0); - EXPECT_TRUE(err.str().empty()); - EXPECT_NE(out.str().find("tsfile-cli "), std::string::npos) << out.str(); - EXPECT_NE(out.str().find(" tsfile="), std::string::npos) << out.str(); - EXPECT_NE(out.str().find(" commit="), std::string::npos) << out.str(); - EXPECT_NE(out.str().find(" built="), std::string::npos) << out.str(); - EXPECT_EQ(out.str().find("unknown"), std::string::npos) << out.str(); -} - -TEST(CliRequirements, FormatVocabularyIsTableNdjsonCsvOnly) { - TableFixture f; - - std::ostringstream ndjson_out; - std::ostringstream ndjson_err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "--start", "0", "--end", - "0", "-f", "ndjson", f.path}, - ndjson_out, ndjson_err), - 0) - << ndjson_err.str(); - EXPECT_EQ(ndjson_out.str(), - "{\"time\":\"0\",\"id1\":\"id1_field_1\",\"id2\":" - "\"id2_field_2\",\"s1\":\"0\"}\n"); - - std::ostringstream json_out; - std::ostringstream json_err; - EXPECT_EQ( - tsfile_cli::run_cli({"cat", "-f", "json", f.path}, json_out, json_err), - 1); - EXPECT_TRUE(json_out.str().empty()); - - std::ostringstream tsv_out; - std::ostringstream tsv_err; - EXPECT_EQ( - tsfile_cli::run_cli({"cat", "-f", "tsv", f.path}, tsv_out, tsv_err), 1); - EXPECT_TRUE(tsv_out.str().empty()); -} - -TEST(CliRequirements, DuplicateSingletonOptionsAreUsageErrors) { - TableFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"cat", "-f", "csv", "-f", "ndjson", f.path}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("--format specified more than once"), - std::string::npos) - << err.str(); - - const std::vector> duplicate_singletons = { - {"cat", "-n", "1", "--limit", "2", f.path}, - {"cat", "--offset", "0", "--offset", "1", f.path}, - {"cat", "--start", "0", "--start", "1", f.path}, - {"cat", "--end", "1", "--end", "2", f.path}, - {"export", "-t", "table1", "--type", "csv", "-o", "a.csv", "--output", - "b.csv", f.path}, - {"export", "-t", "table1", "--type", "csv", "--output-dir", "a", - "--output-dir", "b", f.path}, - {"export", "-t", "table1", "--type", "csv", "-o", "a.csv", "--force", - "--force", f.path}, - }; - for (const std::vector& args : duplicate_singletons) { - std::ostringstream dup_out; - std::ostringstream dup_err; - EXPECT_EQ(tsfile_cli::run_cli(args, dup_out, dup_err), 1) - << dup_err.str(); - EXPECT_TRUE(dup_out.str().empty()); - EXPECT_NE(dup_err.str().find("specified more than once"), - std::string::npos) - << dup_err.str(); - } -} - -TEST(CliRequirements, PositionalFileMustBeFinalUnlessAfterDoubleDash) { - TableFixture f; - - std::ostringstream bad_out; - std::ostringstream bad_err; - int bad_code = - tsfile_cli::run_cli({"cat", f.path, "-f", "csv"}, bad_out, bad_err); - EXPECT_EQ(bad_code, 1); - EXPECT_TRUE(bad_out.str().empty()); - EXPECT_NE(bad_err.str().find("Unexpected argument after file"), - std::string::npos) - << bad_err.str(); - - std::ostringstream ok_out; - std::ostringstream ok_err; - int ok_code = - tsfile_cli::run_cli({"cat", "-m", "s1", "--", f.path}, ok_out, ok_err); - EXPECT_EQ(ok_code, 0) << ok_err.str(); - EXPECT_TRUE(ok_err.str().empty()); -} - -TEST(CliRequirements, MeasurementOptionRepeatsAndRejectsCommaLists) { - TableFixture f; - std::ostringstream comma_out; - std::ostringstream comma_err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1,s2", f.path}, comma_out, - comma_err), - 1); - - std::ostringstream dup_out; - std::ostringstream dup_err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "-m", "s1", f.path}, - dup_out, dup_err), - 1); - EXPECT_NE(dup_err.str().find("specified more than once"), std::string::npos) - << dup_err.str(); -} - -TEST(CliRequirements, MetaOnlyReturnsSizeFormatVersionAndModel) { - TableFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"meta", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_TRUE(err.str().empty()); - EXPECT_EQ(out.str().substr( - 0, std::string("size_bytes,format_version,model\n").size()), - "size_bytes,format_version,model\n") - << out.str(); - EXPECT_EQ(out.str().find("path"), std::string::npos) << out.str(); - EXPECT_EQ(out.str().find("device_count"), std::string::npos) << out.str(); -} - -TEST(CliRequirements, LsReturnsModelAndObjectFields) { - TableFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"ls", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_EQ(out.str(), "model,object\ntable,table1\n"); -} - -TEST(CliRequirements, SchemaReturnsFixedSevenFieldContract) { - TableFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"schema", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_EQ(out.str().substr( - 0, std::string("model,object,column,category,data_type," - "encoding,compression\n") - .size()), - "model,object,column,category,data_type,encoding,compression\n") - << out.str(); - EXPECT_NE(out.str().find("table,table1,id1,TAG,STRING"), std::string::npos) - << out.str(); - EXPECT_NE(out.str().find("table,table1,s1,FIELD,INT64"), std::string::npos) - << out.str(); -} - -TEST(CliRequirements, HeadCatAndExportRejectOffsetWithZeroLimit) { - TableFixture f; - std::string out_path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_zero_limit_export", ".csv"); - - std::ostringstream head_out; - std::ostringstream head_err; - EXPECT_EQ(tsfile_cli::run_cli({"head", "-n", "0", "--offset", "1", f.path}, - head_out, head_err), - 1); - EXPECT_TRUE(head_out.str().empty()); - - std::ostringstream cat_out; - std::ostringstream cat_err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-n", "0", "--offset", "1", f.path}, - cat_out, cat_err), - 1); - EXPECT_TRUE(cat_out.str().empty()); - - std::ostringstream export_out; - std::ostringstream export_err; - EXPECT_EQ( - tsfile_cli::run_cli({"export", "-t", "table1", "--type", "csv", "-o", - out_path, "-n", "0", "--offset", "1", f.path}, - export_out, export_err), - 1); - EXPECT_TRUE(export_out.str().empty()); - EXPECT_FALSE(file_exists(out_path)); - std::remove(out_path.c_str()); -} - -TEST(CliRequirements, HeadAndCatRequireScopeForMultiObjectFiles) { - MultiTableFixture f; - - std::ostringstream cat_out; - std::ostringstream cat_err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "-f", "csv", f.path}, - cat_out, cat_err), - 1); - EXPECT_TRUE(cat_out.str().empty()); - EXPECT_NE(cat_err.str().find("requires -t/--table"), std::string::npos) - << cat_err.str(); - - std::ostringstream head_out; - std::ostringstream head_err; - EXPECT_EQ(tsfile_cli::run_cli({"head", "-m", "s1", "-f", "csv", f.path}, - head_out, head_err), - 1); - EXPECT_TRUE(head_out.str().empty()); - EXPECT_NE(head_err.str().find("requires -t/--table"), std::string::npos) - << head_err.str(); -} - -TEST(CliRequirements, WriteUsesExplicitTagAndFieldOptions) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_req_in", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,id1,s1\n0,dev,0\n1,dev,10\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_req_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t1", "--tag", "id1", "STRING", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - wout, werr); - EXPECT_EQ(wc, 0) << werr.str(); - EXPECT_TRUE(file_exists(out_path)); - - std::ostringstream rout; - std::ostringstream rerr; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "-f", "csv", out_path}, - rout, rerr), - 0) - << rerr.str(); - EXPECT_EQ(rout.str(), "time,id1,s1\n0,dev,0\n1,dev,10\n"); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliRequirements, WriteMapsInputByHeaderName) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_header_order", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "temp,time,site\n21.5,1000,beijing\n22.0,2000,shanghai\n"; - } - std::string out_path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_header_order_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "sensors", "--tag", "site", "STRING", "--field", - "temp", "FLOAT", "-i", csv, "-o", out_path}, - wout, werr); - EXPECT_EQ(wc, 0) << werr.str(); - - std::ostringstream rout; - std::ostringstream rerr; - EXPECT_EQ(tsfile_cli::run_cli( - {"cat", "-t", "sensors", "-f", "csv", out_path}, rout, rerr), - 0) - << rerr.str(); - EXPECT_EQ(rout.str(), - "time,site,temp\n1000,beijing,21.5\n2000,shanghai,22\n"); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliRequirements, WriteRejectsHeaderShapeErrorsBeforeCreatingOutput) { - struct Case { - const char* name; - const char* content; - const char* needle; - }; - const Case cases[] = { - {"missing", "time,site\n1000,beijing\n", "missing required column"}, - {"undeclared", "time,site,temp,status\n1000,beijing,21.5,true\n", - "undeclared column"}, - {"duplicate", "time,site,temp,TEMP\n1000,beijing,21.5,22.0\n", - "conflict"}, - }; - for (const Case& c : cases) { - std::string csv = tsfile_cli_test::unique_temp_path( - std::string("tsfile_cli_header_") + c.name, ".csv"); - { - std::ofstream o(csv.c_str()); - o << c.content; - } - std::string out_path = tsfile_cli_test::unique_temp_path( - std::string("tsfile_cli_header_out_") + c.name, ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"write", "--table", "sensors", "--tag", "site", "STRING", - "--field", "temp", "FLOAT", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 2) << c.name << " " << err.str(); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find(c.needle), std::string::npos) - << c.name << " " << err.str(); - EXPECT_FALSE(file_exists(out_path)); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); - } -} - -TEST(CliRequirements, WriteAppliesAndValidatesTypePhysicalOverrides) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_type_override", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,site,temp,humidity\n" - "1000,beijing,21.0,40.5\n" - "2000,beijing,21.5,41.0\n"; - } - std::string out_path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_type_override_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "sensors", "--tag", - "site", "STRING", "--field", "temp", - "FLOAT", "--field", "humidity", "FLOAT", - "--encoding", "FLOAT", "GORILLA", "--compression", - "FLOAT", "UNCOMPRESSED", "-i", csv, - "-o", out_path}, - wout, werr); - EXPECT_EQ(wc, 0) << werr.str(); - - std::ostringstream schema_out; - std::ostringstream schema_err; - EXPECT_EQ( - tsfile_cli::run_cli({"schema", "-t", "sensors", "-f", "csv", out_path}, - schema_out, schema_err), - 0) - << schema_err.str(); - EXPECT_NE(schema_out.str().find( - "table,sensors,temp,FIELD,FLOAT,GORILLA,UNCOMPRESSED\n"), - std::string::npos) - << schema_out.str(); - EXPECT_NE(schema_out.str().find( - "table,sensors,humidity,FIELD,FLOAT,GORILLA,UNCOMPRESSED\n"), - std::string::npos) - << schema_out.str(); - - std::ostringstream dup_out; - std::ostringstream dup_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"write", "--table", "sensors", "--field", "temp", "FLOAT", - "--encoding", "FLOAT", "GORILLA", "--encoding", "FLOAT", - "PLAIN", "--stdin", "-o", "unused.tsfile"}, - dup_out, dup_err), - 1); - EXPECT_NE(dup_err.str().find("specified more than once"), std::string::npos) - << dup_err.str(); - - std::ostringstream unused_out; - std::ostringstream unused_err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "sensors", "--field", - "temp", "FLOAT", "--encoding", "DOUBLE", - "GORILLA", "--stdin", "-o", "unused.tsfile"}, - unused_out, unused_err), - 1); - EXPECT_NE(unused_err.str().find("not used"), std::string::npos) - << unused_err.str(); - - std::ostringstream bad_out; - std::ostringstream bad_err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "binary_data", "--field", - "payload", "BLOB", "--encoding", "BLOB", - "GORILLA", "--stdin", "-o", "unused.tsfile"}, - bad_out, bad_err), - 1); - EXPECT_NE(bad_err.str().find("not supported"), std::string::npos) - << bad_err.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliRequirements, WriteRejectsExistingOutputWithoutTruncating) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_existing_in", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n0,10\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_existing_out", ".tsfile"); - { - std::ofstream o(out_path.c_str()); - o << "keep-me"; - } - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t1", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 3); - EXPECT_EQ(read_file(out_path), "keep-me"); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliRequirements, WriteRejectsNonRegularInputBeforeCreatingOutput) { -#ifndef _WIN32 - std::string dir = - tsfile_cli_test::unique_temp_path("tsfile_cli_input_dir", ""); - ASSERT_EQ(mkdir(dir.c_str(), 0777), 0); - std::string out_path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_input_dir_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t1", "--field", "s1", - "INT64", "-i", dir, "-o", out_path}, - out, err); - EXPECT_EQ(code, 2); - EXPECT_FALSE(file_exists(out_path)); - - rmdir(dir.c_str()); -#endif -} - -TEST(CliRequirements, WriteRejectsNonCanonicalTimeLexemesAsInputErrors) { - const char* bad_times[] = {"+1", "01", "-0"}; - for (const char* bad_time : bad_times) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_bad_time", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n" << bad_time << ",10\n"; - } - std::string out_path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_bad_time_out", ".tsfile"); - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"write", "--table", "t1", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 2) << bad_time << " " << err.str(); - EXPECT_FALSE(file_exists(out_path)) << bad_time; - std::remove(csv.c_str()); - std::remove(out_path.c_str()); - } -} - -TEST(CliRequirements, WriteTargetFailuresAreRuntimeErrors) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_target", ".csv"); - { - std::ofstream o(csv.c_str(), std::ios::binary); - o << "time,s1\n0,1\n"; - } - - std::ostringstream same_out; - std::ostringstream same_err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "t1", "--field", "s1", - "INT64", "-i", csv, "-o", csv}, - same_out, same_err), - 3); - EXPECT_TRUE(same_out.str().empty()); - EXPECT_NE(same_err.str().find("same as the input"), std::string::npos) - << same_err.str(); - EXPECT_EQ(read_file(csv), "time,s1\n0,1\n"); - - std::string parent = - tsfile_cli_test::unique_temp_path("tsfile_cli_missing_parent", ""); - std::string child = parent + "/out.tsfile"; - std::ostringstream parent_out; - std::ostringstream parent_err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "t1", "--field", "s1", - "INT64", "-i", csv, "-o", child}, - parent_out, parent_err), - 3); - EXPECT_TRUE(parent_out.str().empty()); - EXPECT_NE(parent_err.str().find("cannot create output"), std::string::npos) - << parent_err.str(); - EXPECT_FALSE(file_exists(child)); - - std::remove(csv.c_str()); -} - -TEST(CliRequirements, WriteCsvNullAndEmptyStringRemainDistinctTags) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_tag_null", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,site,temp\n1000,\\N,21.0\n1000,\"\",22.0\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_tag_null_out", ".tsfile"); - std::ostringstream out; - std::ostringstream err; - ASSERT_EQ(tsfile_cli::run_cli( - {"write", "--table", "sensors", "--tag", "site", "STRING", - "--field", "temp", "FLOAT", "-i", csv, "-o", out_path}, - out, err), - 0) - << err.str(); - - std::ostringstream cat_out; - std::ostringstream cat_err; - ASSERT_EQ( - tsfile_cli::run_cli({"cat", "-t", "sensors", "-f", "ndjson", out_path}, - cat_out, cat_err), - 0) - << cat_err.str(); - EXPECT_NE(cat_out.str().find("\"site\":null"), std::string::npos) - << cat_out.str(); - EXPECT_NE(cat_out.str().find("\"site\":\"\""), std::string::npos) - << cat_out.str(); - EXPECT_NE(cat_out.str().find("\"temp\":21"), std::string::npos) - << cat_out.str(); - EXPECT_NE(cat_out.str().find("\"temp\":22"), std::string::npos) - << cat_out.str(); - - std::ostringstream count_out; - std::ostringstream count_err; - ASSERT_EQ(tsfile_cli::run_cli({"count", "-t", "sensors", "-m", "site", "-f", - "csv", out_path}, - count_out, count_err), - 0) - << count_err.str(); - EXPECT_NE(count_out.str().find("table,sensors,site,TAG,2,2"), - std::string::npos) - << count_out.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliRequirements, WriteRejectsUnterminatedQuotedCsvField) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_unclosed_quote", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,site,temp\n1000,\"beijing,21.0\n"; - } - std::string out_path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_unclosed_quote_out", ".tsfile"); - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli( - {"write", "--table", "sensors", "--tag", "site", "STRING", - "--field", "temp", "FLOAT", "-i", csv, "-o", out_path}, - out, err), - 2); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("unterminated quoted CSV field"), - std::string::npos) - << err.str(); - EXPECT_FALSE(file_exists(out_path)); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliRequirements, LegacyColumnsOptionIsRejected) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t1", "--columns", - "legacy", "-o", "x.tsfile", "--stdin"}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("Unknown flag: --columns"), std::string::npos) - << err.str(); -} - -TEST(CliRequirements, WriteRejectsImplicitInputAndFormatFlag) { - std::ostringstream implicit_out; - std::ostringstream implicit_err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "t1", "--field", "s1", - "INT64", "-o", "x.tsfile", "in.csv"}, - implicit_out, implicit_err), - 1); - EXPECT_NE( - implicit_err.str().find("choose exactly one of --input or --stdin"), - std::string::npos) - << implicit_err.str(); - - std::ostringstream format_out; - std::ostringstream format_err; - EXPECT_EQ( - tsfile_cli::run_cli({"write", "--table", "t1", "--field", "s1", "INT64", - "-f", "csv", "--stdin", "-o", "x.tsfile"}, - format_out, format_err), - 1); - EXPECT_NE(format_err.str().find("--format is not valid"), std::string::npos) - << format_err.str(); -} - -TEST(CliRequirements, ExportWritesSingleObjectAtomically) { - TableFixture f; - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_export", ".csv"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"export", "-t", "table1", "-o", out_path, - "--type", "csv", "-m", "s1", f.path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_TRUE(out.str().empty()); - - std::ostringstream cat_out; - std::ostringstream cat_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"cat", "-t", "table1", "-m", "s1", "-f", "csv", f.path}, - cat_out, cat_err), - 0) - << cat_err.str(); - EXPECT_EQ(read_file(out_path), cat_out.str()); - - std::remove(out_path.c_str()); -} - -#ifndef _WIN32 -TEST(CliRequirements, ExportForceRejectsSymlinkAndSpecialTargets) { - TableFixture f; - std::string sentinel = - tsfile_cli_test::unique_temp_path("tsfile_cli_export_sentinel", ".txt"); - std::string symlink_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_export_link", ".csv"); - { - std::ofstream file(sentinel.c_str()); - file << "sentinel"; - } - ASSERT_EQ(symlink(sentinel.c_str(), symlink_path.c_str()), 0); - - std::ostringstream link_out; - std::ostringstream link_err; - EXPECT_EQ(tsfile_cli::run_cli({"export", "-t", "table1", "-o", symlink_path, - "--type", "csv", "--force", f.path}, - link_out, link_err), - 3); - EXPECT_EQ(read_file(sentinel), "sentinel"); - - std::string fifo_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_export_fifo", ".csv"); - ASSERT_EQ(mkfifo(fifo_path.c_str(), 0600), 0); - std::ostringstream fifo_out; - std::ostringstream fifo_err; - EXPECT_EQ(tsfile_cli::run_cli({"export", "-t", "table1", "-o", fifo_path, - "--type", "csv", "--force", f.path}, - fifo_out, fifo_err), - 3); - - std::remove(symlink_path.c_str()); - std::remove(sentinel.c_str()); - std::remove(fifo_path.c_str()); -} -#endif - -TEST(CliRequirements, ExportWritesMultiObjectManifestAndNumberedFiles) { - MultiTableFixture f; - std::string dir = - tsfile_cli_test::unique_temp_path("tsfile_cli_multi_export", ""); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"export", "-t", "sensors_a", "-t", "sensors_b", "--output-dir", dir, - "--type", "csv", "-m", "s1", f.path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_TRUE(out.str().empty()); - EXPECT_EQ(read_file(dir + "/0001.csv"), - "time,id1,s1\n0,sensors_a_tag,10\n"); - EXPECT_EQ(read_file(dir + "/0002.csv"), - "time,id1,s1\n0,sensors_b_tag,20\n"); - std::string manifest = read_file(dir + "/_manifest.json"); - EXPECT_NE(manifest.find("\"complete\": true"), std::string::npos) - << manifest; - EXPECT_NE(manifest.find("\"file\":\"0001.csv\""), std::string::npos) - << manifest; - EXPECT_NE(manifest.find("\"object\":\"sensors_b\""), std::string::npos) - << manifest; - EXPECT_NE(manifest.find("\"rows\":\"1\""), std::string::npos) << manifest; - - std::remove((dir + "/0001.csv").c_str()); - std::remove((dir + "/0002.csv").c_str()); - std::remove((dir + "/_manifest.json").c_str()); -#ifndef _WIN32 - rmdir(dir.c_str()); -#endif -} - -TEST(CliRequirements, MultipleTagFiltersRequireAndHonorTagMatch) { - std::string path = tsfile_cli_test::write_tag_filter_fixture(); - std::ostringstream missing_out; - std::ostringstream missing_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"cat", "-m", "s1", "--tag-filter", "id1", "eq", "dev_a", - "--tag-filter", "id1", "eq", "dev_c", "-f", "csv", path}, - missing_out, missing_err), - 1); - - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ( - tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", "eq", - "dev_a", "--tag-filter", "id1", "eq", "dev_c", - "--tag-match", "any", "-f", "csv", path}, - out, err), - 0) - << err.str(); - EXPECT_EQ(out.str(), "time,id1,s1\n0,dev_a,10\n3,dev_c,40\n"); - std::remove(path.c_str()); -} - -TEST(CliRequirements, SketchRejectsRegularResultFormat) { - TableFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"sketch", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_EQ(out.str(), ""); - EXPECT_EQ(err.str(), - "Error: sketch does not accept --format; its output follows " - "printSketch\n" + - global_usage()); -} - -TEST(CliRequirements, SketchWritesStdoutAndAtomicOutput) { - TableFixture f; - std::ostringstream stdout_out; - std::ostringstream stdout_err; - ASSERT_EQ(tsfile_cli::run_cli({"sketch", f.path}, stdout_out, stdout_err), - 0) - << stdout_err.str(); - EXPECT_EQ(stdout_err.str(), ""); - - std::string output = - tsfile_cli_test::unique_temp_path("tsfile_cli_sketch", ".txt"); - std::ostringstream file_out; - std::ostringstream file_err; - ASSERT_EQ(tsfile_cli::run_cli({"sketch", "-o", output, f.path}, file_out, - file_err), - 0) - << file_err.str(); - EXPECT_EQ(file_out.str(), ""); - EXPECT_EQ(file_err.str(), ""); - EXPECT_EQ(read_file(output), stdout_out.str()); - - const std::string sentinel = "do not replace"; - { - std::ofstream existing(output.c_str(), std::ios::binary); - existing << sentinel; - } - std::ostringstream no_force_out; - std::ostringstream no_force_err; - EXPECT_EQ(tsfile_cli::run_cli({"sketch", "-o", output, f.path}, - no_force_out, no_force_err), - 3); - EXPECT_EQ(no_force_out.str(), ""); - EXPECT_EQ(no_force_err.str(), - "Error: output target '" + output + - "' already exists; use --force to replace a regular file\n"); - EXPECT_EQ(read_file(output), sentinel); - - std::ostringstream force_out; - std::ostringstream force_err; - ASSERT_EQ(tsfile_cli::run_cli({"sketch", "-o", output, "--force", f.path}, - force_out, force_err), - 0) - << force_err.str(); - EXPECT_EQ(force_out.str(), ""); - EXPECT_EQ(force_err.str(), ""); - EXPECT_EQ(read_file(output), stdout_out.str()); - - const std::string source_before = read_file(f.path); - std::ostringstream alias_out; - std::ostringstream alias_err; - EXPECT_EQ(tsfile_cli::run_cli({"sketch", "-o", f.path, "--force", f.path}, - alias_out, alias_err), - 3); - EXPECT_EQ(alias_out.str(), ""); - EXPECT_EQ(alias_err.str(), "Error: output target '" + f.path + - "' is the same as the input file '" + - f.path + "'\n"); - EXPECT_EQ(read_file(f.path), source_before); - std::remove(output.c_str()); -} - -TEST(CliRequirements, ModelDetectionPrefersTableSchemaAndFallsBackToTree) { - TableFixture table; - storage::TsFileReader table_reader; - ASSERT_EQ(table_reader.open(table.path), common::E_OK); - EXPECT_FALSE(table_reader.get_all_table_schemas().empty()); - EXPECT_FALSE(table_reader.get_all_device_ids().empty()); - table_reader.close(); - - std::ostringstream table_out; - std::ostringstream table_err; - ASSERT_EQ(tsfile_cli::run_cli({"ls", "-f", "csv", table.path}, table_out, - table_err), - 0) - << table_err.str(); - EXPECT_EQ(table_out.str(), "model,object\ntable,table1\n"); - - std::string tree_path = tsfile_cli_test::write_sparse_tree_fixture(); - storage::TsFileReader tree_reader; - ASSERT_EQ(tree_reader.open(tree_path), common::E_OK); - EXPECT_TRUE(tree_reader.get_all_table_schemas().empty()); - EXPECT_FALSE(tree_reader.get_all_device_ids().empty()); - tree_reader.close(); - - std::ostringstream tree_out; - std::ostringstream tree_err; - ASSERT_EQ( - tsfile_cli::run_cli({"ls", "-f", "csv", tree_path}, tree_out, tree_err), - 0) - << tree_err.str(); - EXPECT_EQ(tree_out.str(), "model,object\ntree,root.test.d1\n"); - std::remove(tree_path.c_str()); -} diff --git a/cpp/test/tools/command_e2e_test.cc b/cpp/test/tools/command_e2e_test.cc deleted file mode 100644 index e3af86ab1..000000000 --- a/cpp/test/tools/command_e2e_test.cc +++ /dev/null @@ -1,2073 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include "cli/run_cli.h" -#include "cli_test_util.h" -#include "format/input_format.h" - -namespace { - -struct Fixture { - std::string path = tsfile_cli_test::write_table_fixture(); - ~Fixture() { std::remove(path.c_str()); } -}; - -struct TagFilterFixture { - std::string path = tsfile_cli_test::write_tag_filter_fixture(); - ~TagFilterFixture() { std::remove(path.c_str()); } -}; - -struct MultiTableFixture { - std::string path = tsfile_cli_test::write_multi_table_fixture(); - ~MultiTableFixture() { std::remove(path.c_str()); } -}; - -struct DisjointTableFixture { - std::string path = tsfile_cli_test::write_disjoint_table_fixture(); - ~DisjointTableFixture() { std::remove(path.c_str()); } -}; - -struct SparseTreeFixture { - std::string path = tsfile_cli_test::write_sparse_tree_fixture(); - ~SparseTreeFixture() { std::remove(path.c_str()); } -}; - -struct DisjointTreeFixture { - std::string path = tsfile_cli_test::write_disjoint_tree_fixture(); - ~DisjointTreeFixture() { std::remove(path.c_str()); } -}; - -class FlushFailingStreamBuf : public std::stringbuf { - protected: - int sync() override { return -1; } -}; - -size_t count_lines(const std::string& s) { - size_t n = 0; - for (char c : s) { - if (c == '\n') { - ++n; - } - } - return n; -} - -} // namespace - -TEST(CliE2E, LsListsTableNameTsv) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"ls", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(out.str(), "model,object\ntable,table1\n"); - EXPECT_TRUE(err.str().empty()); -} - -TEST(CliE2E, LsRejectsNoHeader) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"ls", "-f", "csv", "--no-header", f.path}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("--no-header"), std::string::npos) << err.str(); -} - -TEST(CliE2E, OpenMissingFileReturnsFileError) { - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"ls", "definitely_missing.tsfile"}, out, err); - EXPECT_EQ(code, 2); - EXPECT_FALSE(err.str().empty()); -} - -TEST(CliE2E, SchemaShowsFieldColumnAndType) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"schema", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - EXPECT_NE(out.str().find("model,object,column,category,data_type,encoding," - "compression"), - std::string::npos); - EXPECT_NE(out.str().find("s1"), std::string::npos); - EXPECT_NE(out.str().find("INT64"), std::string::npos); -} - -TEST(CliE2E, SchemaTableMeasurementFilterOnlyShowsRequestedColumn) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"schema", "-m", "s1", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0); - EXPECT_NE(out.str().find("table,table1,s1,FIELD,INT64"), std::string::npos); - EXPECT_EQ(out.str().find("table1,id1"), std::string::npos); - EXPECT_EQ(out.str().find("table1,id2"), std::string::npos); -} - -TEST(CliE2E, SchemaTableMeasurementFilterIsCaseInsensitive) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"schema", "-m", "S1", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_NE(out.str().find("table,table1,s1,FIELD,INT64"), std::string::npos) - << out.str(); -} - -TEST(CliE2E, SchemaRejectsMissingTableBeforeWritingOutput) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"schema", "-t", "missing", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("does not exist"), std::string::npos) << err.str(); -} - -TEST(CliE2E, StatsReportsCountAndTimeRange) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"stats", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - EXPECT_NE(out.str().find("model,object,tag.id1,tag.id2,field,data_type," - "non_null_count,null_count,min_time,max_time,min," - "max,first,last,sum,stats_source"), - std::string::npos) - << out.str(); - EXPECT_NE(out.str().find("table,table1,id1_field_1,id2_field_2,s1,INT64," - "5,0,0,4,0,40,0,40,\\N,statistics"), - std::string::npos) - << out.str(); -} - -TEST(CliE2E, StatsReportsNumericNullCountForTableFields) { - // Filtered metadata must preserve the shared time statistic so the - // footer's row count and each field's non-null count determine null_count. - const std::string csv_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_null_count", ".csv"); - const std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_null_count", ".tsfile"); - { - std::ofstream csv(csv_path.c_str(), std::ios::binary); - ASSERT_TRUE(csv.good()); - csv << "time,site,temp,note\n" - "1000,beijing,20,n0\n" - "2000,shanghai,21,n1\n" - "3000,beijing,22,\\N\n" - "4000,shanghai,23,n3\n"; - } - std::ostringstream wout, werr; - ASSERT_EQ( - tsfile_cli::run_cli({"write", "--table", "sensors", "--tag", "site", - "STRING", "--field", "temp", "FLOAT", "--field", - "note", "TEXT", "-i", csv_path, "-o", out_path}, - wout, werr), - 0) - << werr.str(); - - std::ostringstream out, err; - ASSERT_EQ(tsfile_cli::run_cli({"stats", "-t", "sensors", "-m", "note", "-f", - "csv", out_path}, - out, err), - 0) - << err.str(); - EXPECT_TRUE(err.str().empty()) << err.str(); - EXPECT_EQ(out.str(), - "model,object,tag.site,field,data_type,non_null_count,null_count," - "min_time,max_time,min,max,first,last,sum,stats_source\n" - "table,sensors,beijing,note,TEXT,1,1,1000,1000,\\N,\\N,n0,n0," - "\\N,statistics\n" - "table,sensors,shanghai,note,TEXT,2,0,2000,4000,\\N,\\N,n1,n3," - "\\N,statistics\n"); - - std::remove(csv_path.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, HeadProjectsAndLimits) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"head", "-m", "s1", "-n", "2", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(out.str(), - "time,id1,id2,s1\n0,id1_field_1,id2_field_2,0\n1,id1_field_1," - "id2_field_2,10\n"); -} - -TEST(CliE2E, CatReturnsAllRows) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"cat", "-m", "s1", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(count_lines(out.str()), 6u); - EXPECT_NE(out.str().find("time,id1,id2,s1\n"), std::string::npos); -} - -TEST(CliE2E, CatRejectsMissingOrNonFieldProjectionBeforeQuery) { - Fixture f; - for (const char* measurement : {"missing", "id1"}) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"cat", "-m", measurement, "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 1) << measurement << " " << err.str(); - EXPECT_TRUE(out.str().empty()) << measurement; - EXPECT_NE(err.str().find("FIELD"), std::string::npos) - << measurement << " " << err.str(); - } -} - -TEST(CliE2E, CatTableProjectionIsCaseInsensitive) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"cat", "-m", "S1", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_EQ(out.str(), - "time,id1,id2,s1\n0,id1_field_1,id2_field_2,0\n1,id1_field_1," - "id2_field_2,10\n2,id1_field_1,id2_field_2,20\n3,id1_field_1," - "id2_field_2,30\n4,id1_field_1,id2_field_2,40\n"); -} - -TEST(CliE2E, CatPushesDownOffsetAndLimit) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"cat", "-m", "s1", "--offset", "2", "-n", "2", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(out.str(), - "time,id1,id2,s1\n2,id1_field_1,id2_field_2,20\n3,id1_field_1," - "id2_field_2,30\n"); -} - -TEST(CliE2E, HeadPushesDownOffsetAndLimit) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"head", "-m", "s1", "--offset", "1", "-n", "3", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(out.str(), - "time,id1,id2,s1\n1,id1_field_1,id2_field_2,10\n2,id1_field_1," - "id2_field_2,20\n3,id1_field_1,id2_field_2,30\n"); -} - -TEST(CliE2E, CatWithTimeRange) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"cat", "-m", "s1", "--start", "2", "--end", "3", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(out.str(), - "time,id1,id2,s1\n2,id1_field_1,id2_field_2,20\n3,id1_field_1," - "id2_field_2,30\n"); -} - -TEST(CliE2E, CatAppliesOffsetAfterTimeRange) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"cat", "-m", "s1", "--start", "1", "--end", "4", - "--offset", "1", "-n", "2", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(out.str(), - "time,id1,id2,s1\n2,id1_field_1,id2_field_2,20\n3,id1_field_1," - "id2_field_2,30\n"); -} - -TEST(CliE2E, CatFiltersRowsByTagEq) { - TagFilterFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", - "eq", "dev_b", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_EQ(out.str(), "time,id1,s1\n1,dev_b,20\n2,dev_b,30\n"); -} - -TEST(CliE2E, HeadFiltersRowsByTagRegexp) { - TagFilterFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"head", "-m", "s1", "--tag-filter", "id1", "regexp", "dev_[bc]", "-n", - "10", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_EQ(out.str(), "time,id1,s1\n1,dev_b,20\n2,dev_b,30\n3,dev_c,40\n"); -} - -TEST(CliE2E, TagFilterRejectsFieldColumn) { - TagFilterFixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "s1", - "eq", "20", "-f", "csv", f.path}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("invalid tag filter column"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, TagFiltersDistinguishNullEmptyAndLiteralNull) { - std::string path = tsfile_cli_test::write_nullable_tag_filter_fixture(); - - struct Case { - std::vector filter; - std::string expected_row; - }; - const std::vector cases = { - {{"id1", "is-null"}, "0,\\N,10\n"}, - {{"id1", "eq", ""}, "1,\"\",20\n"}, - {{"id1", "eq", "null"}, "2,null,30\n"}, - }; - for (const Case& test_case : cases) { - std::vector args = {"cat", "-m", "s1", "--tag-filter"}; - args.insert(args.end(), test_case.filter.begin(), - test_case.filter.end()); - args.insert(args.end(), {"-f", "csv", path}); - std::ostringstream out; - std::ostringstream err; - ASSERT_EQ(tsfile_cli::run_cli(args, out, err), 0) << err.str(); - EXPECT_EQ(out.str(), "time,id1,s1\n" + test_case.expected_row); - } - - std::ostringstream not_null_out; - std::ostringstream not_null_err; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", - "not-null", "-f", "csv", path}, - not_null_out, not_null_err), - 0) - << not_null_err.str(); - EXPECT_EQ(not_null_out.str().find("0,\\N,10"), std::string::npos) - << not_null_out.str(); - EXPECT_NE(not_null_out.str().find("1,\"\",20"), std::string::npos) - << not_null_out.str(); - - std::ostringstream neq_out; - std::ostringstream neq_err; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", - "neq", "dev_a", "-f", "csv", path}, - neq_out, neq_err), - 0) - << neq_err.str(); - EXPECT_EQ(neq_out.str().find("0,\\N,10"), std::string::npos) - << neq_out.str(); - EXPECT_EQ(neq_out.str().find("3,dev_a,40"), std::string::npos) - << neq_out.str(); - EXPECT_NE(neq_out.str().find("4,dev_b,50"), std::string::npos) - << neq_out.str(); - - std::remove(path.c_str()); -} - -TEST(CliE2E, TagRegexpUsesFullValueAndRejectsInvalidPatterns) { - std::string path = tsfile_cli_test::write_nullable_tag_filter_fixture(); - - std::ostringstream substring_out; - std::ostringstream substring_err; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", - "regexp", "dev", "-f", "csv", path}, - substring_out, substring_err), - 0) - << substring_err.str(); - EXPECT_EQ(substring_out.str(), "time,id1,s1\n"); - - std::ostringstream full_out; - std::ostringstream full_err; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", - "regexp", "dev_.*", "-f", "csv", path}, - full_out, full_err), - 0) - << full_err.str(); - EXPECT_NE(full_out.str().find("3,dev_a,40"), std::string::npos) - << full_out.str(); - EXPECT_NE(full_out.str().find("4,dev_b,50"), std::string::npos) - << full_out.str(); - - std::ostringstream invalid_out; - std::ostringstream invalid_err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", - "regexp", "[", "-f", "csv", path}, - invalid_out, invalid_err), - 1); - EXPECT_TRUE(invalid_out.str().empty()); - EXPECT_NE(invalid_err.str().find("invalid regular expression"), - std::string::npos) - << invalid_err.str(); - - std::remove(path.c_str()); -} - -TEST(CliE2E, MultipleTagFiltersHonorAll) { - std::string path = tsfile_cli_test::write_nullable_tag_filter_fixture(); - std::ostringstream out; - std::ostringstream err; - ASSERT_EQ( - tsfile_cli::run_cli({"cat", "-m", "s1", "--tag-filter", "id1", "neq", - "dev_a", "--tag-filter", "id1", "regexp", "dev_.*", - "--tag-match", "all", "-f", "csv", path}, - out, err), - 0) - << err.str(); - EXPECT_EQ(out.str(), "time,id1,s1\n4,dev_b,50\n"); - std::remove(path.c_str()); -} - -TEST(CliE2E, RowWindowDistinguishesExactAndExcessiveOffset) { - Fixture f; - std::ostringstream exact_out; - std::ostringstream exact_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"cat", "-m", "s1", "--offset", "5", "-f", "csv", f.path}, - exact_out, exact_err), - 0) - << exact_err.str(); - EXPECT_EQ(exact_out.str(), "time,id1,id2,s1\n"); - - std::ostringstream excessive_out; - std::ostringstream excessive_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"cat", "-m", "s1", "--offset", "6", "-f", "csv", f.path}, - excessive_out, excessive_err), - 1); - EXPECT_TRUE(excessive_out.str().empty()); - EXPECT_NE(excessive_err.str().find("offset exceeds matched row count"), - std::string::npos) - << excessive_err.str(); -} - -TEST(CliE2E, ZeroLimitUsesEachFormatsZeroRowContract) { - Fixture f; - std::ostringstream csv_out; - std::ostringstream csv_err; - EXPECT_EQ( - tsfile_cli::run_cli({"cat", "-m", "s1", "-n", "0", "-f", "csv", f.path}, - csv_out, csv_err), - 0) - << csv_err.str(); - EXPECT_EQ(csv_out.str(), "time,id1,id2,s1\n"); - - std::ostringstream ndjson_out; - std::ostringstream ndjson_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"cat", "-m", "s1", "-n", "0", "-f", "ndjson", f.path}, - ndjson_out, ndjson_err), - 0) - << ndjson_err.str(); - EXPECT_TRUE(ndjson_out.str().empty()); - - std::ostringstream table_out; - std::ostringstream table_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"cat", "-m", "s1", "-n", "0", "-f", "table", f.path}, - table_out, table_err), - 0) - << table_err.str(); - EXPECT_NE(table_out.str().find("time"), std::string::npos) - << table_out.str(); - EXPECT_NE(table_out.str().find("s1"), std::string::npos) << table_out.str(); - EXPECT_EQ(table_out.str().find("id1_field_1"), std::string::npos) - << table_out.str(); -} - -TEST(CliE2E, CatJsonIsNdjson) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"cat", "-m", "s1", "--start", "0", "--end", - "0", "-f", "ndjson", f.path}, - out, err); - EXPECT_EQ(code, 0); - EXPECT_EQ(out.str(), - "{\"time\":\"0\",\"id1\":\"id1_field_1\",\"id2\":" - "\"id2_field_2\",\"s1\":\"0\"}\n"); -} - -TEST(CliE2E, StdoutFlushFailureReturnsRuntimeError) { - Fixture f; - FlushFailingStreamBuf buffer; - std::ostream out(&buffer); - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-f", "csv", f.path}, out, err), 3); - EXPECT_NE(err.str().find("failed to read rows"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, MetaReportsFileSummary) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"meta", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - EXPECT_TRUE(err.str().empty()); - EXPECT_NE(out.str().find("size_bytes,format_version,model\n"), - std::string::npos) - << out.str(); - EXPECT_NE(out.str().find(",4,table\n"), std::string::npos) << out.str(); -} - -TEST(CliE2E, MetaReportsFileHeaderVersionWithoutConstrainingReader) { - SparseTreeFixture f; - std::fstream file(f.path.c_str(), - std::ios::in | std::ios::out | std::ios::binary); - ASSERT_TRUE(file.good()); - file.seekp(storage::MAGIC_STRING_TSFILE_LEN); - file.put(static_cast(3)); - file.close(); - - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli({"meta", "-f", "csv", f.path}, out, err), 0) - << err.str(); - EXPECT_TRUE(err.str().empty()); - EXPECT_NE(out.str().find(",3,tree\n"), std::string::npos) << out.str(); -} - -TEST(CliE2E, CountReportsColumnCountsWithoutSummaryRows) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"count", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - EXPECT_TRUE(err.str().empty()); - EXPECT_NE(out.str().find("model,object,column,category,row_count,entity_" - "count,non_null_count,null_count,min_time," - "max_time,time_source"), - std::string::npos) - << out.str(); - EXPECT_NE(out.str().find("table,table1,id1,TAG,5,1,5,0,0,4,scan"), - std::string::npos) - << out.str(); - EXPECT_NE(out.str().find("table,table1,s1,FIELD,5,1,5,0,0,4,scan"), - std::string::npos) - << out.str(); - EXPECT_EQ(out.str().find("total"), std::string::npos) << out.str(); -} - -TEST(CliE2E, CountAndStatsDefaultToAllTables) { - MultiTableFixture f; - std::ostringstream count_out; - std::ostringstream count_err; - EXPECT_EQ(tsfile_cli::run_cli({"count", "-f", "csv", f.path}, count_out, - count_err), - 0) - << count_err.str(); - EXPECT_NE(count_out.str().find("table,sensors_a,s1,FIELD,1,1,1,0,0,0,scan"), - std::string::npos) - << count_out.str(); - EXPECT_NE(count_out.str().find("table,sensors_b,s1,FIELD,1,1,1,0,0,0,scan"), - std::string::npos) - << count_out.str(); - - std::ostringstream stats_out; - std::ostringstream stats_err; - EXPECT_EQ(tsfile_cli::run_cli({"stats", "-f", "csv", f.path}, stats_out, - stats_err), - 0) - << stats_err.str(); - EXPECT_NE(stats_out.str().find("table,sensors_a,sensors_a_tag,s1,INT64"), - std::string::npos) - << stats_out.str(); - EXPECT_NE(stats_out.str().find("table,sensors_b,sensors_b_tag,s1,INT64"), - std::string::npos) - << stats_out.str(); -} - -TEST(CliE2E, CountAndStatsProjectionMayMatchOnlySomeTables) { - DisjointTableFixture f; - std::ostringstream count_out; - std::ostringstream count_err; - ASSERT_EQ(tsfile_cli::run_cli({"count", "-m", "S1", "-f", "csv", f.path}, - count_out, count_err), - 0) - << count_err.str(); - EXPECT_NE(count_out.str().find("table,sensors_a,s1,FIELD"), - std::string::npos) - << count_out.str(); - EXPECT_EQ(count_out.str().find("table,sensors_b"), std::string::npos) - << count_out.str(); - - std::ostringstream stats_out; - std::ostringstream stats_err; - ASSERT_EQ(tsfile_cli::run_cli({"stats", "-m", "S1", "-f", "csv", f.path}, - stats_out, stats_err), - 0) - << stats_err.str(); - EXPECT_NE(stats_out.str().find("table,sensors_a,sensors_a_tag,s1,INT64"), - std::string::npos) - << stats_out.str(); - EXPECT_EQ(stats_out.str().find("table,sensors_b"), std::string::npos) - << stats_out.str(); -} - -TEST(CliE2E, CountAndStatsProjectionMayMatchOnlySomeTreeDevices) { - DisjointTreeFixture f; - std::ostringstream count_out; - std::ostringstream count_err; - ASSERT_EQ(tsfile_cli::run_cli({"count", "-m", "left", "-f", "csv", f.path}, - count_out, count_err), - 0) - << count_err.str(); - EXPECT_NE(count_out.str().find("tree,root.test.d1,left,FIELD"), - std::string::npos) - << count_out.str(); - EXPECT_EQ(count_out.str().find("tree,root.test.d2"), std::string::npos) - << count_out.str(); - - std::ostringstream stats_out; - std::ostringstream stats_err; - ASSERT_EQ(tsfile_cli::run_cli({"stats", "-m", "left", "-f", "csv", f.path}, - stats_out, stats_err), - 0) - << stats_err.str(); - EXPECT_NE(stats_out.str().find("tree,root.test.d1,left,INT32"), - std::string::npos) - << stats_out.str(); - EXPECT_EQ(stats_out.str().find("tree,root.test.d2"), std::string::npos) - << stats_out.str(); -} - -TEST(CliE2E, TreeCountAndStatsUseDeviceTimestampUnion) { - SparseTreeFixture f; - std::ostringstream count_out; - std::ostringstream count_err; - ASSERT_EQ(tsfile_cli::run_cli({"count", "-f", "csv", f.path}, count_out, - count_err), - 0) - << count_err.str(); - EXPECT_NE(count_out.str().find( - "tree,root.test.d1,left,FIELD,3,\\N,2,1,0,2,statistics"), - std::string::npos) - << count_out.str(); - EXPECT_NE(count_out.str().find( - "tree,root.test.d1,right,FIELD,3,\\N,2,1,1,2,statistics"), - std::string::npos) - << count_out.str(); - - std::ostringstream stats_out; - std::ostringstream stats_err; - ASSERT_EQ(tsfile_cli::run_cli({"stats", "-f", "csv", f.path}, stats_out, - stats_err), - 0) - << stats_err.str(); - EXPECT_NE(stats_out.str().find( - "tree,root.test.d1,left,INT32,2,1,0,2,10,20,10,20,30," - "statistics"), - std::string::npos) - << stats_out.str(); - EXPECT_NE(stats_out.str().find( - "tree,root.test.d1,right,BOOLEAN,2,1,1,2,\\N,\\N,true,false," - "1,statistics"), - std::string::npos) - << stats_out.str(); -} - -TEST(CliE2E, TreeHeadWithoutDeviceUsesBareMeasurementNames) { - // A single-device tree file queried without -d resolves the only device - // implicitly. Result columns must still be bare measurement names (FIELD), - // not "device.measurement" (TsFile-143 / requirement 3.1.4.2 examples). - SparseTreeFixture f; - - std::ostringstream ndjson_out; - std::ostringstream ndjson_err; - EXPECT_EQ(tsfile_cli::run_cli( - {"head", "-m", "left", "-n", "1", "-f", "ndjson", f.path}, - ndjson_out, ndjson_err), - 0) - << ndjson_err.str(); - EXPECT_EQ(ndjson_out.str(), "{\"time\":\"0\",\"left\":10}\n"); - - std::ostringstream csv_out; - std::ostringstream csv_err; - EXPECT_EQ( - tsfile_cli::run_cli({"head", "-f", "csv", f.path}, csv_out, csv_err), 0) - << csv_err.str(); - EXPECT_EQ(csv_out.str(), - "time,left,right\n" - "0,10,\\N\n" - "1,\\N,true\n" - "2,20,false\n"); -} - -TEST(CliE2E, MetadataTableFilterIsCaseInsensitive) { - Fixture f; - - std::ostringstream schema_out; - std::ostringstream schema_err; - EXPECT_EQ( - tsfile_cli::run_cli({"schema", "-t", "TABLE1", "-f", "csv", f.path}, - schema_out, schema_err), - 0); - EXPECT_NE(schema_out.str().find("table,table1,s1,FIELD,INT64"), - std::string::npos) - << schema_out.str(); - - std::ostringstream count_out; - std::ostringstream count_err; - EXPECT_EQ( - tsfile_cli::run_cli({"count", "-t", "TABLE1", "-f", "csv", f.path}, - count_out, count_err), - 0); - EXPECT_NE(count_out.str().find("table,table1,s1,FIELD,5,1,5,0,0,4,scan"), - std::string::npos) - << count_out.str(); - - std::ostringstream stats_out; - std::ostringstream stats_err; - EXPECT_EQ( - tsfile_cli::run_cli({"stats", "-t", "TABLE1", "-f", "csv", f.path}, - stats_out, stats_err), - 0); - EXPECT_NE(stats_out.str().find("table,table1,id1_field_1,id2_field_2,s1," - "INT64,5,0,0,4,0,40,0,40,\\N,statistics"), - std::string::npos) - << stats_out.str(); -} - -TEST(CliE2E, WriteThenReadRoundTrip) { - std::string csv_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_write_in", ".csv"); - { - std::ofstream o(csv_path.c_str()); - o << "time,id1,s1\n0,dev,0\n1,dev,10\n2,dev,20\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_write_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t1", "--tag", "id1", "STRING", "--field", "s1", - "INT64", "-i", csv_path, "-o", out_path}, - wout, werr); - EXPECT_EQ(wc, 0) << werr.str(); - - std::ostringstream cout_; - std::ostringstream cerr_; - int cc = - tsfile_cli::run_cli({"count", "-f", "csv", out_path}, cout_, cerr_); - EXPECT_EQ(cc, 0); - EXPECT_NE(cout_.str().find("table,t1,s1,FIELD,3,1,3,0,0,2,scan"), - std::string::npos) - << cout_.str(); - - std::ostringstream rout; - std::ostringstream rerr; - int rc = tsfile_cli::run_cli({"cat", "-m", "s1", "-f", "csv", out_path}, - rout, rerr); - EXPECT_EQ(rc, 0); - EXPECT_EQ(rout.str(), "time,id1,s1\n0,dev,0\n1,dev,10\n2,dev,20\n"); - - std::remove(csv_path.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteThenReadFloatDoubleRoundTripLossless) { - std::string csv_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_fp_in", ".csv"); - { - std::ofstream o(csv_path.c_str()); - o << "time,id1,f1,d1\n0,dev,0.1,0.1\n1,dev,3.4028235," - "3.141592653589793\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_fp_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t1", "--tag", "id1", "STRING", "--field", "f1", - "FLOAT", "--field", "d1", "DOUBLE", "-i", csv_path, "-o", out_path}, - wout, werr); - ASSERT_EQ(wc, 0) << werr.str(); - - std::ostringstream rout; - std::ostringstream rerr; - int rc = tsfile_cli::run_cli({"cat", "-f", "ndjson", out_path}, rout, rerr); - ASSERT_EQ(rc, 0) << rerr.str(); - // Default ostream precision (6 sig digits) would print 0.1 / 3.40282 and - // lose bits; max_digits10 keeps every digit needed to round-trip. - EXPECT_NE(rout.str().find("0.100000001"), std::string::npos) << rout.str(); - EXPECT_NE(rout.str().find("3.40282345"), std::string::npos) << rout.str(); - EXPECT_NE(rout.str().find("3.1415926535897931"), std::string::npos) - << rout.str(); - - std::remove(csv_path.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteImportsQuotedFieldWithEmbeddedNewline) { - std::string csv_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_nl_in", ".csv"); - { - // Keep the fixture's LF bytes unchanged on Windows as well. - std::ofstream o(csv_path.c_str(), std::ios::binary); - // The note field on the first row spans two physical lines inside - // quotes; it must import as a single row, not be split into two. - o << "time,id1,note\n0,dev,\"line one\nline two\"\n1,dev,plain\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_nl_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t1", "--tag", "id1", "STRING", "--field", "note", - "TEXT", "-i", csv_path, "-o", out_path}, - wout, werr); - ASSERT_EQ(wc, 0) << werr.str(); - - std::ostringstream cout_; - std::ostringstream cerr_; - ASSERT_EQ( - tsfile_cli::run_cli({"count", "-f", "csv", out_path}, cout_, cerr_), 0); - EXPECT_NE(cout_.str().find("table,t1,note,FIELD,2,1,2,0,0,1,scan"), - std::string::npos) - << cout_.str(); - - std::ostringstream rout; - std::ostringstream rerr; - ASSERT_EQ( - tsfile_cli::run_cli({"cat", "-f", "ndjson", out_path}, rout, rerr), 0); - EXPECT_NE(rout.str().find("line one\\nline two"), std::string::npos) - << rout.str(); - - std::remove(csv_path.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteMissingColumnsIsUsageError) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"write", "--table", "t1", "-o", "x.tsfile", "in.csv"}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("--field"), std::string::npos); -} - -namespace { -bool path_exists(const std::string& p) { - std::ifstream in(p.c_str()); - return in.good(); -} -} // namespace - -TEST(CliE2E, WriteRejectsOutOfOrderTimestampsAndLeavesNoOutput) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_ooo", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n5,50\n1,10\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_ooo_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 2); - EXPECT_NE(err.str().find("strictly increasing"), std::string::npos) - << err.str(); - EXPECT_NE(err.str().find("line 3"), std::string::npos) << err.str(); - EXPECT_FALSE(path_exists(out_path)) << "failed import must leave no output"; - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteAllowsSameTimestampAcrossDevices) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_md", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,id,s1\n1,A,10\n1,B,20\n2,A,30\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_md_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"write", "--table", "t", "--tag", "id", "STRING", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - - std::ostringstream cout_; - std::ostringstream cerr_; - tsfile_cli::run_cli({"count", "-f", "csv", out_path}, cout_, cerr_); - EXPECT_NE(cout_.str().find("table,t,s1,FIELD,3,2,3,0,1,2,scan"), - std::string::npos) - << cout_.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteRejectsOutputEqualsInput) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_alias", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n0,1\n"; - } - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - "INT64", "-i", csv, "-o", csv}, - out, err); - EXPECT_EQ(code, 3); - EXPECT_NE(err.str().find("same as the input"), std::string::npos) - << err.str(); - // The input file must be untouched. - std::ifstream in(csv.c_str()); - std::stringstream buf; - buf << in.rdbuf(); - EXPECT_EQ(buf.str(), "time,s1\n0,1\n"); - - std::remove(csv.c_str()); -} - -TEST(CliE2E, WriteFailureOnBadValueLeavesNoOutput) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_badval", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n0,notanumber\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_badval_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 2); - EXPECT_FALSE(path_exists(out_path)); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteRejectsDuplicateColumnNames) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"write", "--table", "t", "--field", "s1", "INT64", "--field", "s1", - "INT64", "--stdin", "-o", "x.tsfile"}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("duplicate column"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, WriteRejectsTagOnlySchema) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t", "--tag", "id", - "STRING", "--stdin", "-o", "x.tsfile"}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("--field"), std::string::npos) << err.str(); -} - -TEST(CliE2E, WriteRejectsNonStringTag) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"write", "--table", "t", "--tag", "id", "INT64", "--field", "s1", - "INT64", "--stdin", "-o", "x.tsfile"}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("must use STRING"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, WriteNormalizesNamesAndHeaderCase) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_case", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,ID,S1\n0,a,1\n"; - } - std::string output = - tsfile_cli_test::unique_temp_path("tsfile_cli_case_out", ".tsfile"); - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli( - {"write", "--table", "Mixed", "--tag", "Id", "STRING", - "--field", "s1", "INT64", "-i", csv, "-o", output}, - out, err), - 0) - << err.str(); - std::ostringstream schema_out; - std::ostringstream schema_err; - EXPECT_EQ(tsfile_cli::run_cli({"schema", "-f", "csv", output}, schema_out, - schema_err), - 0); - EXPECT_NE(schema_out.str().find("table,mixed,id,TAG,STRING"), - std::string::npos); - std::remove(csv.c_str()); - std::remove(output.c_str()); -} - -TEST(CliE2E, WriteRejectsHeaderMatchWithNoHeader) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli( - {"write", "--table", "t", "--field", "s1", "INT64", "-o", "x.tsfile", - "--stdin", "--no-header", "--header-match"}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("--header-match"), std::string::npos) << err.str(); -} - -TEST(CliE2E, ReadRejectsWriteOnlyFlag) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"ls", "-o", "x.tsfile", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("only valid for write"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, ReadRejectsWriteColumnFlags) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"ls", "--field", "s1", "INT64", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("--tag/--field are only valid for write"), - std::string::npos) - << err.str(); -} - -TEST(CliE2E, MetaRejectsDeviceScopeFlag) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"meta", "-d", "dev", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("not valid for meta"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, SchemaTableShowsEncodingAndCompression) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"schema", "-f", "csv", f.path}, out, err); - EXPECT_EQ(code, 0); - // Table-model schema must report the fixture's configured encoding and - // compression rather than blanks. - EXPECT_NE(out.str().find(",s1,FIELD,INT64,PLAIN,UNCOMPRESSED\n"), - std::string::npos) - << out.str(); -} - -namespace { -// Run a one-row `write` whose single value cell is `value`, declaring the -// column as `type`. Returns the exit code; captures stderr into `err`. -int write_one_value(const std::string& type, const std::string& value, - std::string& err_out) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_ovf", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n0," << value << "\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_ovf_out", ".tsfile"); - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - type, "-i", csv, "-o", out_path}, - out, err); - err_out = err.str(); - std::remove(csv.c_str()); - std::remove(out_path.c_str()); - return code; -} -} // namespace - -TEST(CliE2E, WriteRejectsInt32Overflow) { - std::string err; - EXPECT_EQ(write_one_value("INT32", "3000000000", err), 2); - EXPECT_NE(err.find("INT32 out of range"), std::string::npos) << err; -} - -TEST(CliE2E, WriteAcceptsInt32Boundary) { - std::string err; - EXPECT_EQ(write_one_value("INT32", "2147483647", err), 0) << err; -} - -TEST(CliE2E, WriteRejectsInt64Overflow) { - std::string err; - EXPECT_EQ(write_one_value("INT64", "99999999999999999999999999", err), 2); - EXPECT_NE(err.find("INT64 out of range"), std::string::npos) << err; -} - -TEST(CliE2E, WriteRejectsDoubleOverflow) { - std::string err; - EXPECT_EQ(write_one_value("DOUBLE", "1e400", err), 2); - EXPECT_NE(err.find("DOUBLE out of range"), std::string::npos) << err; -} - -TEST(CliE2E, WriteRejectsNonNumericInt64) { - std::string err; - EXPECT_EQ(write_one_value("INT64", "12abc", err), 2); - EXPECT_NE(err.find("bad INT64"), std::string::npos) << err; -} - -TEST(CliE2E, WriteDateRequiresStrictIsoLexicalForm) { - std::string err; - EXPECT_EQ(write_one_value("DATE", "2024-1-1", err), 2); - EXPECT_NE(err.find("want YYYY-MM-DD"), std::string::npos) << err; - EXPECT_EQ(write_one_value("DATE", "2024-02-30", err), 2); - EXPECT_EQ(write_one_value("DATE", "2024-02-29", err), 0) << err; -} - -TEST(CliE2E, WriteAcceptsOneLeadingUtf8Bom) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_bom", ".csv"); - { - std::ofstream o(csv.c_str(), std::ios::binary); - o << "\xEF\xBB\xBFtime,s1\n0,1\n"; - } - std::string output = - tsfile_cli_test::unique_temp_path("tsfile_cli_bom_out", ".tsfile"); - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - "INT64", "-i", csv, "-o", output}, - out, err), - 0) - << err.str(); - std::remove(csv.c_str()); - std::remove(output.c_str()); -} - -TEST(CliE2E, WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput) { - const std::string invalid_utf8 = - std::string("time,s1\n0,") + static_cast(0xC3) + "(\n"; - const std::string misplaced_bom = - "time,s1\n0,\xEF\xBB\xBF" - "1\n"; - const std::string inputs[] = {invalid_utf8, misplaced_bom}; - - for (size_t i = 0; i < 2; ++i) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_bad_utf8", ".csv"); - std::string output = tsfile_cli_test::unique_temp_path( - "tsfile_cli_bad_utf8_out", ".tsfile"); - { - std::ofstream file(csv.c_str(), std::ios::binary); - file.write(inputs[i].data(), - static_cast(inputs[i].size())); - } - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - "INT64", "-i", csv, "-o", output}, - out, err), - 2) - << err.str(); - std::ifstream target(output.c_str(), std::ios::binary); - EXPECT_FALSE(target.good()); - std::remove(csv.c_str()); - std::remove(output.c_str()); - } -} - -TEST(CliE2E, WriteRejectsReservedAndControlCharacterNames) { - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "t", "--field", "time", - "INT64", "--stdin", "-o", "unused.tsfile"}, - out, err), - 1); - EXPECT_NE(err.str().find("reserved"), std::string::npos) << err.str(); - - out.str(""); - out.clear(); - err.str(""); - err.clear(); - EXPECT_EQ( - tsfile_cli::run_cli({"write", "--table", "bad\nname", "--field", "s1", - "INT64", "--stdin", "-o", "unused.tsfile"}, - out, err), - 1); - EXPECT_NE(err.str().find("control"), std::string::npos) << err.str(); -} - -TEST(CliE2E, WriteFailurePreservesExistingTarget) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_existing", ".csv"); - std::string output = - tsfile_cli_test::unique_temp_path("tsfile_cli_existing_out", ".tsfile"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n0,1\n"; - } - { - std::ofstream o(output.c_str()); - o << "sentinel"; - } - std::ostringstream out; - std::ostringstream err; - EXPECT_EQ(tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - "INT64", "-i", csv, "-o", output}, - out, err), - 3); - std::ifstream existing(output.c_str()); - std::stringstream content; - content << existing.rdbuf(); - EXPECT_EQ(content.str(), "sentinel"); - std::remove(csv.c_str()); - std::remove(output.c_str()); -} - -TEST(CliE2E, WriteRejectsOutOfOrderAcrossBatches) { - // More than one 1024-row batch of ascending rows, then a violating - // timestamp. The first batch is already flushed by the time the bad row is - // read, so this proves both that per-device tracking survives a batch flush - // and that the already-written output is removed on failure. - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_xbatch", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n"; - for (int i = 1; i <= 1100; ++i) { - o << i << "," << i << "\n"; - } - o << "500,999\n"; // <= the last timestamp for the tag-less device - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_xbatch_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 2); - EXPECT_NE(err.str().find("strictly increasing"), std::string::npos) - << err.str(); - EXPECT_FALSE(path_exists(out_path)); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteStreamsLargeInputRoundTrips) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_large", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n"; - for (int i = 1; i <= 3000; ++i) { - o << i << "," << (i * 2) << "\n"; - } - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_large_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "big", "--field", "s1", - "INT64", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - - std::ostringstream cout_; - std::ostringstream cerr_; - tsfile_cli::run_cli({"count", "-f", "csv", out_path}, cout_, cerr_); - EXPECT_NE(cout_.str().find("table,big,s1,FIELD,3000,1,3000,0,1,3000,scan"), - std::string::npos) - << cout_.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, HelpWithPositionalFileIsUsageError) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"cat", "--help", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("--help"), std::string::npos) << err.str(); -} - -TEST(CliE2E, StatsRejectsRowOnlyFlag) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"stats", "--start", "1", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("only valid for head/cat"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, LsRejectsMeasurementsFlag) { - Fixture f; - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"ls", "-m", "s1", f.path}, out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("not valid for ls"), std::string::npos) - << err.str(); -} - -TEST(CliE2E, WriteRoundTripsTimestampDateBlob) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_tdb", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,id1,ts1,d1,b1\n" - "0,dev,1700000000000,2024-01-15,hello\n" - "1,dev,1700000000001,2024-12-31,world\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_tdb_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t1", "--tag", "id1", "STRING", "--field", "ts1", - "TIMESTAMP", "--field", "d1", "DATE", "--field", "b1", "BLOB", "-o", - out_path, "-i", csv}, - wout, werr); - ASSERT_EQ(wc, 0) << werr.str(); - - std::ostringstream rout; - std::ostringstream rerr; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-f", "csv", out_path}, rout, rerr), - 0) - << rerr.str(); - // TIMESTAMP stays a decimal string, DATE uses YYYY-MM-DD, and BLOB uses - // the external 0x-prefixed lowercase hex lexeme. - EXPECT_NE(rout.str().find("1700000000000"), std::string::npos) - << rout.str(); - EXPECT_NE(rout.str().find("2024-01-15"), std::string::npos) << rout.str(); - EXPECT_NE(rout.str().find("2024-12-31"), std::string::npos) << rout.str(); - EXPECT_NE(rout.str().find("0x68656c6c6f"), std::string::npos) << rout.str(); - EXPECT_NE(rout.str().find("0x776f726c64"), std::string::npos) << rout.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteRejectsBadDate) { - std::string err; - EXPECT_EQ(write_one_value("DATE", "not-a-date", err), 2); - EXPECT_NE(err.find("bad DATE"), std::string::npos) << err; -} - -TEST(CliE2E, WriteVerboseEchoesConfig) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_vb", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,s1\n0,1\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_vb_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli({"write", "--table", "vt", "--field", "s1", - "INT64", "-v", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - EXPECT_NE(err.str().find("created model=table object=vt rows=1 output="), - std::string::npos) - << err.str(); - EXPECT_NE(err.str().find("column=s1 category=FIELD data_type=INT64"), - std::string::npos) - << err.str(); - EXPECT_NE(err.str().find("source=default"), std::string::npos) << err.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteRejectsHeaderMatch) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_hm", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,wrong\n0,1\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_hm_out", ".tsfile"); - - std::ostringstream out; - std::ostringstream err; - int code = - tsfile_cli::run_cli({"write", "--table", "t", "--field", "s1", "INT64", - "--header-match", "-i", csv, "-o", out_path}, - out, err); - EXPECT_EQ(code, 1); - EXPECT_NE(err.str().find("--header-match"), std::string::npos) << err.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -// Every column carries a distinct, type-specific value, so the JSON output pins -// each column name to exactly one value. This is what guards the by-index -// add_value mapping in cmd_write: if any two columns were written to the wrong -// slot, a key/value pair below would mismatch. -TEST(CliE2E, WriteMapsEachColumnToItsOwnValue) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_colmap", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,a_bool,b_int,c_long,d_float,e_double,f_str,g_ts,h_date\n" - "10,true,42,9000000000,1.5,3.25,hello,1700000000000,2024-06-15\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_colmap_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t1", "--field", "a_bool", "BOOLEAN", - "--field", "b_int", "INT32", "--field", "c_long", "INT64", - "--field", "d_float", "FLOAT", "--field", "e_double", "DOUBLE", - "--field", "f_str", "STRING", "--field", "g_ts", "TIMESTAMP", - "--field", "h_date", "DATE", "-i", csv, "-o", - out_path}, - wout, werr); - ASSERT_EQ(wc, 0) << werr.str(); - - std::ostringstream rout; - std::ostringstream rerr; - ASSERT_EQ( - tsfile_cli::run_cli({"cat", "-f", "ndjson", out_path}, rout, rerr), 0) - << rerr.str(); - const std::string& j = rout.str(); - EXPECT_NE(j.find("\"a_bool\":true"), std::string::npos) << j; - EXPECT_NE(j.find("\"b_int\":42"), std::string::npos) << j; - EXPECT_NE(j.find("\"c_long\":\"9000000000\""), std::string::npos) << j; - EXPECT_NE(j.find("\"d_float\":1.5"), std::string::npos) << j; - EXPECT_NE(j.find("\"e_double\":3.25"), std::string::npos) << j; - EXPECT_NE(j.find("\"f_str\":\"hello\""), std::string::npos) << j; - EXPECT_NE(j.find("\"g_ts\":\"1700000000000\""), std::string::npos) << j; - EXPECT_NE(j.find("\"h_date\":\"2024-06-15\""), std::string::npos) << j; - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -// A multi-type import spanning several batches must keep every value in its own -// column after each flush. Tags vary so timestamps may repeat across devices. -TEST(CliE2E, WriteMultiTypeAcrossBatchesRoundTrips) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_mtb", ".csv"); - const int kRows = 2500; // > 2 batches of 1024 - { - std::ofstream o(csv.c_str()); - o << "time,id,n,note\n"; - for (int i = 0; i < kRows; ++i) { - o << i << ",dev," << (i * 3) << ",row" << i << "\n"; - } - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_mtb_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t", "--tag", "id", "STRING", "--field", "n", - "INT64", "--field", "note", "TEXT", "-i", csv, "-o", out_path}, - wout, werr); - ASSERT_EQ(wc, 0) << werr.str(); - - std::ostringstream cout_; - std::ostringstream cerr_; - ASSERT_EQ( - tsfile_cli::run_cli({"count", "-f", "csv", out_path}, cout_, cerr_), 0); - EXPECT_NE(cout_.str().find("table,t,n,FIELD,2500,1,2500,0,0,2499,scan"), - std::string::npos) - << cout_.str(); - - // Spot-check a row from the last batch keeps n and note paired correctly. - std::ostringstream rout; - std::ostringstream rerr; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "--start", "2400", "--end", "2400", - "-f", "ndjson", out_path}, - rout, rerr), - 0) - << rerr.str(); - EXPECT_NE(rout.str().find("\"n\":\"7200\""), std::string::npos) - << rout.str(); - EXPECT_NE(rout.str().find("\"note\":\"row2400\""), std::string::npos) - << rout.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -// A quoted STRING field containing the delimiter and escaped quotes must -// survive import and re-export unchanged (RFC 4180 round-trip through the -// writer). -TEST(CliE2E, WriteRoundTripsQuotedSpecialChars) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_special", ".csv"); - { - std::ofstream o(csv.c_str()); - // note = a,b "q" c (comma + embedded quotes) - o << "time,id,note\n0,dev,\"a,b \"\"q\"\" c\"\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_special_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t", "--tag", "id", "STRING", "--field", "note", - "STRING", "-i", csv, "-o", out_path}, - wout, werr); - ASSERT_EQ(wc, 0) << werr.str(); - - // JSON escapes the embedded quotes; the comma is preserved verbatim. - std::ostringstream rout; - std::ostringstream rerr; - ASSERT_EQ( - tsfile_cli::run_cli({"cat", "-f", "ndjson", out_path}, rout, rerr), 0) - << rerr.str(); - EXPECT_NE(rout.str().find("\"note\":\"a,b \\\"q\\\" c\""), - std::string::npos) - << rout.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, WriteRejectsTimestampOverflow) { - std::string err; - EXPECT_EQ(write_one_value("TIMESTAMP", "99999999999999999999999999", err), - 2); - EXPECT_NE(err.find("TIMESTAMP out of range"), std::string::npos) << err; -} - -TEST(CliE2E, WriteRejectsNonNumericTimestampColumn) { - std::string err; - EXPECT_EQ(write_one_value("TIMESTAMP", "not-a-number", err), 2); - EXPECT_NE(err.find("bad TIMESTAMP"), std::string::npos) << err; -} - -TEST(CliE2E, WriteRejectsImpossibleDate) { - // Syntactically YYYY-MM-DD but not a real calendar date. - std::string err; - EXPECT_EQ(write_one_value("DATE", "2024-13-40", err), 2); - EXPECT_NE(err.find("bad DATE"), std::string::npos) << err; -} - -TEST(CliE2E, WriteAcceptsDateBoundary) { - std::string err; - EXPECT_EQ(write_one_value("DATE", "2024-02-29", err), 0) - << err; // leap day -} - -// CSV nulls use unquoted \N; quoted empty strings stay distinct from null. -TEST(CliE2E, WriteDistinguishesCsvNullAndEmptyString) { - std::string csv = - tsfile_cli_test::unique_temp_path("tsfile_cli_null", ".csv"); - { - std::ofstream o(csv.c_str()); - o << "time,id,n\n0,dev,\\N\n1,\"\",7\n"; - } - std::string out_path = - tsfile_cli_test::unique_temp_path("tsfile_cli_null_out", ".tsfile"); - - std::ostringstream wout; - std::ostringstream werr; - int wc = tsfile_cli::run_cli( - {"write", "--table", "t", "--tag", "id", "STRING", "--field", "n", - "INT64", "-i", csv, "-o", out_path}, - wout, werr); - ASSERT_EQ(wc, 0) << werr.str(); - - std::ostringstream rout; - std::ostringstream rerr; - ASSERT_EQ( - tsfile_cli::run_cli({"cat", "-f", "ndjson", out_path}, rout, rerr), 0) - << rerr.str(); - EXPECT_NE(rout.str().find("\"n\":null"), std::string::npos) << rout.str(); - EXPECT_NE(rout.str().find("\"id\":\"\""), std::string::npos) << rout.str(); - - std::remove(csv.c_str()); - std::remove(out_path.c_str()); -} - -TEST(CliE2E, InvalidUtf8IdentifiersAreReplacedOnlyInOutput) { - storage::libtsfile_init(); - const std::string path = - tsfile_cli_test::unique_temp_path("tsfile_cli_utf8_names", ".tsfile"); - std::string device = "root.device\xff"; - std::string valid_device = "root.\xe4\xb8\xad\xe6\x96\x87"; - const std::string measurement = "value\xe1\x80"; - const std::string valid_measurement = "\xe6\xb8\xa9\xe5\xba\xa6"; - const std::string replacement = "\xef\xbf\xbd"; - { - storage::WriteFile file; - int flags = O_WRONLY | O_CREAT | O_TRUNC; -#ifdef _WIN32 - flags |= O_BINARY; -#endif - ASSERT_EQ(file.create(path, flags, 0666), common::E_OK); - storage::MeasurementSchema schema(measurement, common::INT64, - common::PLAIN, common::UNCOMPRESSED); - storage::MeasurementSchema valid_schema(valid_measurement, - common::INT64, common::PLAIN, - common::UNCOMPRESSED); - storage::TsFileTreeWriter writer(&file); - ASSERT_EQ(writer.register_timeseries(device, &schema), common::E_OK); - ASSERT_EQ(writer.register_timeseries(valid_device, &valid_schema), - common::E_OK); - storage::TsRecord record(device, 0); - record.add_point(measurement, static_cast(42)); - ASSERT_EQ(writer.write(record), common::E_OK); - storage::TsRecord valid_record(valid_device, 0); - valid_record.add_point(valid_measurement, static_cast(7)); - ASSERT_EQ(writer.write(valid_record), common::E_OK); - ASSERT_EQ(writer.flush(), common::E_OK); - ASSERT_EQ(writer.close(), common::E_OK); - } - - const std::string formats[] = {"csv", "ndjson", "table"}; - for (const std::string& format : formats) { - for (const std::string& command : {"ls", "schema", "stats", "count"}) { - SCOPED_TRACE(command + " " + format); - std::ostringstream out, err; - ASSERT_EQ( - tsfile_cli::run_cli({command, "-f", format, path}, out, err), 0) - << err.str(); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(out.str())); - EXPECT_NE(out.str().find("root.device" + replacement), - std::string::npos); - EXPECT_NE(out.str().find(valid_device), std::string::npos); - } - for (const std::string& command : {"head", "cat"}) { - SCOPED_TRACE(command + " " + format); - std::ostringstream out, err; - ASSERT_EQ(tsfile_cli::run_cli({command, "-d", device, "-m", - measurement, "-f", format, path}, - out, err), - 0) - << err.str(); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(out.str())); - EXPECT_NE(out.str().find("value" + replacement), std::string::npos); - EXPECT_NE(out.str().find("42"), std::string::npos); - } - - const std::string output = tsfile_cli_test::unique_temp_path( - "tsfile_cli_utf8_export", "." + format); - std::ostringstream out, err; - ASSERT_EQ(tsfile_cli::run_cli({"export", "-d", device, "--type", format, - "-o", output, path}, - out, err), - 0) - << err.str(); - std::ifstream file(output.c_str(), std::ios::binary); - std::ostringstream content; - content << file.rdbuf(); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(content.str())); - EXPECT_NE(content.str().find("value" + replacement), std::string::npos); - file.close(); - std::remove(output.c_str()); - } - - std::ostringstream sketch, sketch_err; - ASSERT_EQ(tsfile_cli::run_cli({"sketch", path}, sketch, sketch_err), 0) - << sketch_err.str(); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(sketch.str())); - EXPECT_NE(sketch.str().find("value" + replacement), std::string::npos); - - const std::string dir = - tsfile_cli_test::unique_temp_path("tsfile_cli_utf8_manifest", ""); - std::ostringstream out, err; - ASSERT_EQ( - tsfile_cli::run_cli({"export", "-d", device, "-d", valid_device, - "--type", "ndjson", "--output-dir", dir, path}, - out, err), - 0) - << err.str(); - std::ifstream manifest((dir + "/_manifest.json").c_str(), std::ios::binary); - std::ostringstream content; - content << manifest.rdbuf(); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(content.str())); - EXPECT_NE(content.str().find("root.device" + replacement), - std::string::npos); - EXPECT_NE(content.str().find(valid_device), std::string::npos); - manifest.close(); - std::remove((dir + "/0001.ndjson").c_str()); - std::remove((dir + "/0002.ndjson").c_str()); - std::remove((dir + "/_manifest.json").c_str()); -#ifdef _WIN32 - _rmdir(dir.c_str()); -#else - rmdir(dir.c_str()); -#endif - std::remove(path.c_str()); -} - -TEST(CliE2E, Utf8JsonKeyCollisionsFailWithoutPublishingOutput) { - storage::libtsfile_init(); - const std::string path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_utf8_collision", ".tsfile"); - std::string device = "root.collision"; - const std::vector names = {"bad\xff", "bad\xfe", - "bad\xef\xbf\xbd"}; - { - storage::WriteFile file; - int flags = O_WRONLY | O_CREAT | O_TRUNC; -#ifdef _WIN32 - flags |= O_BINARY; -#endif - ASSERT_EQ(file.create(path, flags, 0666), common::E_OK); - storage::MeasurementSchema first(names[0], common::INT64, common::PLAIN, - common::UNCOMPRESSED); - storage::MeasurementSchema second(names[1], common::INT64, - common::PLAIN, common::UNCOMPRESSED); - storage::MeasurementSchema third(names[2], common::INT64, common::PLAIN, - common::UNCOMPRESSED); - storage::TsFileTreeWriter writer(&file); - ASSERT_EQ(writer.register_timeseries(device, &first), common::E_OK); - ASSERT_EQ(writer.register_timeseries(device, &second), common::E_OK); - ASSERT_EQ(writer.register_timeseries(device, &third), common::E_OK); - storage::TsRecord record(device, 0); - record.add_point(names[0], static_cast(42)); - record.add_point(names[1], static_cast(7)); - record.add_point(names[2], static_cast(9)); - ASSERT_EQ(writer.write(record), common::E_OK); - ASSERT_EQ(writer.flush(), common::E_OK); - ASSERT_EQ(writer.close(), common::E_OK); - } - - for (const std::string& command : {"head", "cat"}) { - for (size_t second : {size_t(1), size_t(2)}) { - for (bool empty : {false, true}) { - SCOPED_TRACE(command + " second=" + std::to_string(second) + - " empty=" + std::to_string(empty)); - std::vector args = { - command, "-d", device, "-m", names[0], - "-m", names[second], "-f", "ndjson", path}; - if (empty) { - args.insert(args.end() - 1, {"--start", "0", "-n", "0"}); - } - std::ostringstream out, err; - EXPECT_EQ(tsfile_cli::run_cli(args, out, err), 2) << err.str(); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("duplicate column name"), - std::string::npos); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(err.str())); - } - } - } - - const std::string output = tsfile_cli_test::unique_temp_path( - "tsfile_cli_utf8_collision_export", ".ndjson"); - for (bool existing : {false, true}) { - if (existing) { - std::ofstream target(output.c_str(), std::ios::binary); - target << "keep existing output\n"; - } - std::vector args = {"export", "-d", device, "--type", - "ndjson", "-o", output, path}; - if (existing) { - args.insert(args.end() - 1, "--force"); - } - std::ostringstream out, err; - EXPECT_EQ(tsfile_cli::run_cli(args, out, err), 2) << err.str(); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("duplicate column name"), std::string::npos); - std::ifstream target(output.c_str(), std::ios::binary); - if (existing) { - ASSERT_TRUE(target.is_open()); - std::ostringstream content; - content << target.rdbuf(); - EXPECT_EQ(content.str(), "keep existing output\n"); - } else { - EXPECT_FALSE(target.is_open()); - } - } - std::remove(output.c_str()); - std::remove(path.c_str()); -} - -TEST(CliE2E, TableUtf8JsonKeyCollisionsFailInRowsAndStats) { - storage::libtsfile_init(); - const std::string path = tsfile_cli_test::unique_temp_path( - "tsfile_cli_utf8_table_collision", ".tsfile"); - std::string table = "collision"; - const std::vector names = {"bad\xff", "bad\xfe", "value"}; - { - storage::WriteFile file; - int flags = O_WRONLY | O_CREAT | O_TRUNC; -#ifdef _WIN32 - flags |= O_BINARY; -#endif - ASSERT_EQ(file.create(path, flags, 0666), common::E_OK); - storage::TableSchema schema( - table, {common::ColumnSchema(names[0], common::STRING, - common::UNCOMPRESSED, common::PLAIN, - common::ColumnCategory::TAG), - common::ColumnSchema(names[1], common::STRING, - common::UNCOMPRESSED, common::PLAIN, - common::ColumnCategory::TAG), - common::ColumnSchema(names[2], common::INT64, - common::UNCOMPRESSED, common::PLAIN, - common::ColumnCategory::FIELD)}); - storage::TsFileTableWriter writer(&file, &schema); - storage::Tablet tablet( - table, names, {common::STRING, common::STRING, common::INT64}, - {common::ColumnCategory::TAG, common::ColumnCategory::TAG, - common::ColumnCategory::FIELD}, - 1); - tablet.add_timestamp(0, static_cast(0)); - tablet.add_value(0, names[0], "first"); - tablet.add_value(0, names[1], "second"); - tablet.add_value(0, names[2], static_cast(42)); - ASSERT_EQ(writer.write_table(tablet), common::E_OK); - ASSERT_EQ(writer.flush(), common::E_OK); - ASSERT_EQ(writer.close(), common::E_OK); - } - for (const std::string& command : {"head", "cat", "stats"}) { - SCOPED_TRACE(command); - std::ostringstream out, err; - EXPECT_EQ(tsfile_cli::run_cli( - {command, "-t", table, "-f", "ndjson", path}, out, err), - 2); - EXPECT_TRUE(out.str().empty()); - EXPECT_NE(err.str().find("duplicate column name"), std::string::npos); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(err.str())); - } - std::remove(path.c_str()); -} - -TEST(CliE2E, WriteCatCsvWritePreservesLeadingBackslashes) { - const std::string input = - tsfile_cli_test::unique_temp_path("tsfile_cli_slash_input", ".csv"); - const std::string first = - tsfile_cli_test::unique_temp_path("tsfile_cli_slash_first", ".tsfile"); - const std::string exported = - tsfile_cli_test::unique_temp_path("tsfile_cli_slash_export", ".csv"); - const std::string second = - tsfile_cli_test::unique_temp_path("tsfile_cli_slash_second", ".tsfile"); - { - std::ofstream csv(input.c_str(), std::ios::binary); - ASSERT_TRUE(csv.good()); - csv << R"csv(time,site,note -1000,s1,\N -2000,s1,"\N" -3000,s1,\leading -4000,s1,back\slash -5000,s1,"\with,comma" -6000,\site,tag\end -7000,\\site,\\N -)csv"; - } - const auto write = [&](const std::string& source, - const std::string& target) { - std::ostringstream out, err; - int code = tsfile_cli::run_cli( - {"write", "--table", "t", "--tag", "site", "STRING", "--field", - "note", "TEXT", "-i", source, "-o", target}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - return code; - }; - ASSERT_EQ(write(input, first), 0); - - std::ostringstream before, before_err, csv_out, csv_err; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-t", "t", "-f", "ndjson", first}, - before, before_err), - 0) - << before_err.str(); - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-t", "t", "-f", "csv", first}, - csv_out, csv_err), - 0) - << csv_err.str(); - const std::string csv = csv_out.str(); - EXPECT_NE(csv.find(R"csv(1000,s1,\N -)csv"), - std::string::npos); - EXPECT_NE(csv.find(R"csv(2000,s1,\\N -)csv"), - std::string::npos); - EXPECT_NE(csv.find(R"csv(3000,s1,\\leading -)csv"), - std::string::npos); - EXPECT_NE(csv.find(R"csv(4000,s1,back\slash -)csv"), - std::string::npos); - EXPECT_NE(csv.find(R"csv(5000,s1,"\\with,comma" -)csv"), - std::string::npos); - EXPECT_NE(csv.find(R"csv(6000,\\site,tag\end -)csv"), - std::string::npos); - { - std::ofstream file(exported.c_str(), std::ios::binary); - ASSERT_TRUE(file.good()); - file << csv; - } - ASSERT_EQ(write(exported, second), 0); - std::ostringstream after, after_err; - ASSERT_EQ(tsfile_cli::run_cli({"cat", "-t", "t", "-f", "ndjson", second}, - after, after_err), - 0) - << after_err.str(); - EXPECT_EQ(before.str(), after.str()); - - std::remove(input.c_str()); - std::remove(first.c_str()); - std::remove(exported.c_str()); - std::remove(second.c_str()); -} - -TEST(CliE2E, WriteCatAndExportCsvPreserveQuotedLineEndings) { - const std::string input = - tsfile_cli_test::unique_temp_path("tsfile_cli_crlf_input", ".csv"); - const std::string first = - tsfile_cli_test::unique_temp_path("tsfile_cli_crlf_first", ".tsfile"); - const std::string expected_csv = - "time,site,message,note\n" - "0,\"s\r\n1\",\"first\r\nsecond\",\"\"\"quoted\"\"\r\n\r\nlast\"\n" - "1,\"s\r\n1\",\"lf\nonly\",\"mixed\r\nand\nmore\"\n" - "2,\"s\r\n1\",\"carriage\rreturn\",\"\r\n\"\n" - "3,\"s\r\n1\",\"ends\r\",\"line\r\nend\"\n"; - { - std::ofstream csv(input.c_str(), std::ios::binary); - ASSERT_TRUE(csv.good()); - // CRLF record boundaries, embedded CRLF/LF/CR, and no final newline. - csv << "time,site,message,note\r\n" - "0,\"s\r\n1\",\"first\r\nsecond\"," - "\"\"\"quoted\"\"\r\n\r\nlast\"\r\n" - "1,\"s\r\n1\",\"lf\nonly\",\"mixed\r\nand\nmore\"\r\n" - "2,\"s\r\n1\",\"carriage\rreturn\",\"\r\n\"\r\n" - "3,\"s\r\n1\",\"ends\r\",\"line\r\nend\""; - } - const auto write = [&](const std::string& source, - const std::string& target) { - std::ostringstream out, err; - const int code = tsfile_cli::run_cli( - {"write", "--table", "t", "--tag", "site", "STRING", "--field", - "message", "STRING", "--field", "note", "TEXT", "-i", source, "-o", - target}, - out, err); - EXPECT_EQ(code, 0) << err.str(); - return code; - }; - const auto read = [&](const std::string& path, const std::string& format) { - std::ostringstream out, err; - EXPECT_EQ(tsfile_cli::run_cli({"cat", "-t", "t", "-f", format, path}, - out, err), - 0) - << err.str(); - return out.str(); - }; - const std::string expected_ndjson = - R"json({"time":"0","site":"s\r\n1","message":"first\r\nsecond","note":"\"quoted\"\r\n\r\nlast"})json" - "\n" - R"json({"time":"1","site":"s\r\n1","message":"lf\nonly","note":"mixed\r\nand\nmore"})json" - "\n" - R"json({"time":"2","site":"s\r\n1","message":"carriage\rreturn","note":"\r\n"})json" - "\n" - R"json({"time":"3","site":"s\r\n1","message":"ends\r","note":"line\r\nend"})json" - "\n"; - ASSERT_EQ(write(input, first), 0); - EXPECT_EQ(read(first, "ndjson"), expected_ndjson); - - for (const std::string command : {"cat", "export"}) { - SCOPED_TRACE(command); - const std::string exported = tsfile_cli_test::unique_temp_path( - "tsfile_cli_crlf_" + command, ".csv"); - const std::string second = tsfile_cli_test::unique_temp_path( - "tsfile_cli_crlf_" + command, ".tsfile"); - if (command == "cat") { - const std::string csv = read(first, "csv"); - EXPECT_EQ(csv, expected_csv); - std::ofstream file(exported.c_str(), std::ios::binary); - ASSERT_TRUE(file.good()); - file << csv; - } else { - std::ostringstream out, err; - ASSERT_EQ(tsfile_cli::run_cli({"export", "-t", "t", "--type", "csv", - "-o", exported, first}, - out, err), - 0) - << err.str(); - std::ifstream file(exported.c_str(), std::ios::binary); - ASSERT_TRUE(file.good()); - std::ostringstream bytes; - bytes << file.rdbuf(); - EXPECT_EQ(bytes.str(), expected_csv); - } - ASSERT_EQ(write(exported, second), 0); - EXPECT_EQ(read(second, "ndjson"), expected_ndjson); - std::remove(exported.c_str()); - std::remove(second.c_str()); - } - std::remove(input.c_str()); - std::remove(first.c_str()); -} diff --git a/cpp/test/tools/e2e/.gitignore b/cpp/test/tools/e2e/.gitignore new file mode 100644 index 000000000..aa913395a --- /dev/null +++ b/cpp/test/tools/e2e/.gitignore @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +__pycache__/ +*.pyc diff --git a/cpp/test/tools/e2e/README.md b/cpp/test/tools/e2e/README.md new file mode 100644 index 000000000..c261b0d6e --- /dev/null +++ b/cpp/test/tools/e2e/README.md @@ -0,0 +1,130 @@ + + +# CLI end-to-end tests + +This directory is a standalone test bundle. Copy it to a machine with Python +3.9+ and a built or installed `tsfile-cli`; no TsFile headers, C++ compiler, +Google Test, Python TsFile package, or source checkout are required to run it. +The CLI itself still needs its native runtime dependencies. + +```sh +python3 run_cli_e2e.py --cli /path/to/tsfile-cli --output-dir /tmp/cli-results +``` + +On Windows, use `python` and the path to `tsfile-cli.exe`. The executable path +is resolved before entering the isolated case directories. Use +`--expected-version ` to check the product version, `--case ` to +select a case, and `--timeout ` to change the per-command timeout. + +Each invocation creates a new `run-*` directory below `--output-dir` and prints +its path. It retains a `report.json` and one directory per case. The report +records SHA-256 identities for the executable, command suite, driver, and assets. Each executed +step writes `NNN.stdout`, `NNN.stderr`, and `NNN.exit_code`; a failing step also +writes `NNN.diff`. Generated files remain in the case's `work/` directory. +The runner exits 0 when the selected cases pass, 1 on test failure, and 2 on an +invalid invocation or suite. These runner statuses are separate from the CLI +exit codes asserted by each step. + +## Cases and expected results + +`cases.json` contains all command arguments and expected exit codes. The +`golden/` directory contains expected stdout, stderr, and exported text; +`fixtures/` contains fixed TsFiles and other test inputs. The `_license` field +is license metadata, and `baseline_commit` identifies the source revision +against which the migrated cases were validated. + +A case is a sequence of commands sharing one initially empty workspace: + +```json +{ + "id": "MissingInput", + "steps": [ + { + "args": ["ls", "missing.tsfile"], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/missing_input.txt", + "files": {} + } + ] +} +``` + +This is a schema example; add the named expected files when adding such a case. +Arguments are passed as an array, without a shell. Exit codes are compared +independently of output files: a matching output with the wrong exit code is a +failure. Timeouts, launch failures, and process crashes also fail the case. +A failing step stops dependent steps in that case, while other cases still run. + +Optional step fields: + +- `prepare`: ordered filesystem setup actions. Each action has a relative + `path` and a `type`: `file` (copy bytes from `source` in this bundle), + `directory`, `absent`, `symlink` (with a relative `target`), or `fifo`. + Setup actions describe changes originally made by the C++ fixture helpers. +- `stdin`: a fixture file whose bytes are sent to the command's stdin. Stdin is + otherwise empty. +- `files`: expected changes to the workspace after the command. Each entry + specifies its `type`; use `absent` for a removed path. A regular file may + specify `source` for an exact content comparison. Symlinks specify `target`. + All paths not listed must remain unchanged, including their bytes. Missing + and unexpected files fail the step, including partial files left behind by + failed writes. +- `posix_only`: a reason to skip a step on Windows, used for FIFOs, symlinks, + or arguments containing raw non-UTF-8 bytes. Skipped steps are recorded in + the report. +- `stdout_format: "version"`: require a complete, consistent version line and + compare its template with the golden. Product version, commit, and build + timestamp vary by the executable being tested; `--expected-version` can pin + the product version. `require_concrete_commit: true` preserves the existing + concrete-build-metadata case, which rejects an `unknown` commit. Raw stdout is still retained in the results. + +Output comparisons preserve bytes, whitespace, ordering, and CSV embedded +line endings. Only stderr's native Windows CRT newline translation is accounted +for. Generated TsFiles are checked for existence and read back with CLI commands +against text goldens; their serialized bytes are not a cross-version contract. +Untouched input fixtures and preexisting targets are compared byte for byte. + +The original 141 golden files and fixed tree/table fixtures are preserved. +Additional fixtures and expected outputs migrate the executable-level cases +from `command_e2e_test.cc`, `model_format_e2e_test.cc`, +`utf8_collision_e2e_test.cc`, and the command cases formerly in +`cli_args_test.cc` and `cli_requirements_test.cc`. The original 170 tests were +run with their existing assertions before migration; parser and injected +metadata/stream failures remain C++ unit tests. Successful writes additionally +have a CLI read-back step, and stdin has a process-level round-trip case. +Content-addressed fixture names allow cases to share identical binary inputs. + +Goldens are reviewed test inputs. The runner never updates them. When changing +an expected result, inspect the retained actual file and diff before editing +its golden. When adding cases, use the functional contract of the product +version being tested; a newer test revision may independently validate an older +release candidate without modifying that candidate's source or installed files. + +## Build integration + +When C++ tools and tests are enabled, CTest runs `CliE2E` against the built CLI +and `CliE2ERunnerTest` against small child processes that exercise the runner's +failure handling. Python 3.9+ is required for these tests. + +```sh +ctest --test-dir /test -R '^CliE2E' --output-on-failure +python3 -m unittest discover -s . -p test_runner.py -v +``` diff --git a/cpp/test/tools/e2e/cases.json b/cpp/test/tools/e2e/cases.json new file mode 100644 index 000000000..5dd85cc6e --- /dev/null +++ b/cpp/test/tools/e2e/cases.json @@ -0,0 +1,17838 @@ +{ + "_license": [ + "Licensed to the Apache Software Foundation (ASF) under one", + "or more contributor license agreements. See the NOTICE file", + "distributed with this work for additional information", + "regarding copyright ownership. The ASF licenses this file", + "to you 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." + ], + "schema_version": 1, + "baseline_commit": "795d3b41d831bcc1cc33f3e7abfd9b6296037672", + "cases": [ + { + "id": "CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats", + "steps": [ + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_0.tsfile", + "type": "file", + "source": "fixtures/recorded/25bf81a100c6d89c.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_0.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_0.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_0.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_0.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "utf8_collision_0.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/019.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_1.tsfile", + "type": "file", + "source": "fixtures/recorded/e8c9ceba19eff9ac.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_1.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_1.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_1.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_1.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "utf8_collision_1.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/038.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats", + "steps": [ + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_2.tsfile", + "type": "file", + "source": "fixtures/recorded/0fe32771aae23654.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_2.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_2.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_2.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_2.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_3.tsfile", + "type": "file", + "source": "fixtures/recorded/cebca58ed56e0aab.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_3.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_3.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_3.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_3.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_4.tsfile", + "type": "file", + "source": "fixtures/recorded/a520e2dad89980a5.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_4.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_4.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_4.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_4.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_5.tsfile", + "type": "file", + "source": "fixtures/recorded/6e07eb49b34dc35a.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_5.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_5.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_5.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_5.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_6.tsfile", + "type": "file", + "source": "fixtures/recorded/9b943a465ab2e97e.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_6.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_6.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_6.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_6.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_7.tsfile", + "type": "file", + "source": "fixtures/recorded/89472d6be3e8a4f2.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_7.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_7.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_7.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_7.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_8.tsfile", + "type": "file", + "source": "fixtures/recorded/2ed856c16e47ccba.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_8.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_8.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_8.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_8.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_9.tsfile", + "type": "file", + "source": "fixtures/recorded/a3888eac21f087b1.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_9.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_9.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "utf8_collision_9.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_9.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_10.tsfile", + "type": "file", + "source": "fixtures/recorded/e7c20447ea054908.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-d", + "bad\udcff", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-d", + "bad\udcff", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-d", + "bad\udcff", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "csv", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-d", + "bad\udcff", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-d", + "bad\udcff", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-d", + "bad\udcff", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "table", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-d", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-d", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-d", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_10.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_11.tsfile", + "type": "file", + "source": "fixtures/recorded/5077671e7b6996b9.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-d", + "bad\udcff", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-d", + "bad\udcff", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-d", + "bad\udcff", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "csv", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-d", + "bad\udcff", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-d", + "bad\udcff", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-d", + "bad\udcff", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "table", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-d", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-d", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-d", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_11.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_12.tsfile", + "type": "file", + "source": "fixtures/recorded/5a1ae43282c6e8d5.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "bad\udcff", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/063.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/064.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-t", + "bad\udcff", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/066.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/067.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "bad\udcff", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "csv", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "bad\udcff", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/073.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/074.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-t", + "bad\udcff", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/076.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/077.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "bad\udcff", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "table", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/083.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/084.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-t", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/086.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/087.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_12.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_13.tsfile", + "type": "file", + "source": "fixtures/recorded/956fbe6974cab2b1.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "bad\udcff", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/063.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/064.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-t", + "bad\udcff", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/066.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/067.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "bad\udcff", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "csv", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "bad\udcff", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/073.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/074.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-t", + "bad\udcff", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/076.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/077.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "bad\udcff", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "table", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/083.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/084.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-t", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/086.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/087.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "ndjson", + "utf8_collision_13.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid", + "steps": [ + { + "args": [ + "schema", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "utf8_collision_14.tsfile", + "type": "file", + "source": "fixtures/recorded/65f89edd125782e8.tsfile" + }, + { + "path": "utf8_collision_15.tsfile", + "type": "file", + "source": "fixtures/recorded/f65a26f837b23e39.tsfile" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/005.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/007.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/007.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "a", + "-m", + "bad\udcff", + "--type", + "csv", + "-o", + "utf8_collision_16.out", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_16.out": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/007.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "csv", + "--output-dir", + "utf8_collision_export_17", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_export_17": { + "type": "directory" + }, + "utf8_collision_export_17/0001.csv": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010.0001.csv.txt" + }, + "utf8_collision_export_17/0002.csv": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010.0001.csv.txt" + }, + "utf8_collision_export_17/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010._manifest.json.txt" + } + } + }, + { + "args": [ + "schema", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/011.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/013.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/014.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/015.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/016.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/017.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/017.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "a", + "-m", + "bad\udcff", + "--type", + "table", + "-o", + "utf8_collision_18.out", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_18.out": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/017.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "table", + "--output-dir", + "utf8_collision_export_19", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_export_19": { + "type": "directory" + }, + "utf8_collision_export_19/0001.txt": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020.0001.txt.txt" + }, + "utf8_collision_export_19/0002.txt": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020.0001.txt.txt" + }, + "utf8_collision_export_19/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020._manifest.json.txt" + } + } + }, + { + "args": [ + "schema", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/021.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/022.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/023.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/024.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/025.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/026.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/027.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/027.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "a", + "-m", + "bad\udcff", + "--type", + "ndjson", + "-o", + "utf8_collision_20.out", + "utf8_collision_14.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_20.out": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/027.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_export_21", + "utf8_collision_15.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_export_21": { + "type": "directory" + }, + "utf8_collision_export_21/0001.ndjson": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030.0001.ndjson.txt" + }, + "utf8_collision_export_21/0002.ndjson": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030.0001.ndjson.txt" + }, + "utf8_collision_export_21/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030._manifest.json.txt" + } + } + }, + { + "args": [ + "schema", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/031.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "utf8_collision_22.tsfile", + "type": "file", + "source": "fixtures/recorded/19010534e83117ea.tsfile" + }, + { + "path": "utf8_collision_23.tsfile", + "type": "file", + "source": "fixtures/recorded/3f705604910a155c.tsfile" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/032.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/033.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/034.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/035.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/036.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/037.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-m", + "bad\udcff", + "-f", + "csv", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/037.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "a", + "-m", + "bad\udcff", + "--type", + "csv", + "-o", + "utf8_collision_24.out", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_24.out": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/037.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "csv", + "--output-dir", + "utf8_collision_export_25", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_export_25": { + "type": "directory" + }, + "utf8_collision_export_25/0001.csv": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040.0001.csv.txt" + }, + "utf8_collision_export_25/0002.csv": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040.0001.csv.txt" + }, + "utf8_collision_export_25/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040._manifest.json.txt" + } + } + }, + { + "args": [ + "schema", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/041.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/042.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/043.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/044.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/045.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/046.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/047.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-m", + "bad\udcff", + "-f", + "table", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/047.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "a", + "-m", + "bad\udcff", + "--type", + "table", + "-o", + "utf8_collision_26.out", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_26.out": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/047.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "table", + "--output-dir", + "utf8_collision_export_27", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_export_27": { + "type": "directory" + }, + "utf8_collision_export_27/0001.txt": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050.0001.txt.txt" + }, + "utf8_collision_export_27/0002.txt": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050.0001.txt.txt" + }, + "utf8_collision_export_27/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050._manifest.json.txt" + } + } + }, + { + "args": [ + "schema", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/051.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/052.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/053.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/054.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/055.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/056.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/057.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-m", + "bad\udcff", + "-f", + "ndjson", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/057.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "a", + "-m", + "bad\udcff", + "--type", + "ndjson", + "-o", + "utf8_collision_28.out", + "utf8_collision_22.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_28.out": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/057.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_export_29", + "utf8_collision_23.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "utf8_collision_export_29": { + "type": "directory" + }, + "utf8_collision_export_29/0001.ndjson": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060.0001.ndjson.txt" + }, + "utf8_collision_export_29/0002.ndjson": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060.0001.ndjson.txt" + }, + "utf8_collision_export_29/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060._manifest.json.txt" + } + } + } + ] + }, + { + "id": "CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables", + "steps": [ + { + "args": [ + "stats", + "-f", + "csv", + "utf8_collision_30.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_30.tsfile", + "type": "file", + "source": "fixtures/recorded/cea175b2e6fa8cdb.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "a", + "-f", + "csv", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "utf8_collision_30.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/007.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "a", + "-f", + "table", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/008.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "utf8_collision_30.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/010.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/011.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "a", + "-f", + "ndjson", + "utf8_collision_30.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliUtf8CollisionTest.EmptyRowWindowsCannotHideSelectedNameCollisions", + "steps": [ + { + "args": [ + "head", + "-n", + "0", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_31.tsfile", + "type": "file", + "source": "fixtures/recorded/25bf81a100c6d89c.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-n", + "0", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-n", + "0", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_34.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "0", + "-n", + "0", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "0", + "-n", + "0", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "0", + "-n", + "0", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_37.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "2000", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "2000", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "2000", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_40.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--end", + "0", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--end", + "0", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--end", + "0", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_43.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--offset", + "1", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--offset", + "1", + "-f", + "csv", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--offset", + "1", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_46.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-n", + "0", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-n", + "0", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-n", + "0", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_49.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "0", + "-n", + "0", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "0", + "-n", + "0", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "0", + "-n", + "0", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_52.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "2000", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "2000", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "2000", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_55.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--end", + "0", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--end", + "0", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--end", + "0", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_58.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--offset", + "1", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--offset", + "1", + "-f", + "table", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--offset", + "1", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_61.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-n", + "0", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_64.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "0", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "0", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "0", + "-n", + "0", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_67.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "2000", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "2000", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "2000", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_70.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--end", + "0", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--end", + "0", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--end", + "0", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_73.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--offset", + "1", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--offset", + "1", + "-f", + "ndjson", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--offset", + "1", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_76.out", + "utf8_collision_31.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-n", + "0", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_77.tsfile", + "type": "file", + "source": "fixtures/recorded/cebca58ed56e0aab.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-n", + "0", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-n", + "0", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_80.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "0", + "-n", + "0", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "0", + "-n", + "0", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "0", + "-n", + "0", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_83.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "2000", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "2000", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "2000", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_86.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--end", + "0", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--end", + "0", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--end", + "0", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_89.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--offset", + "1", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--offset", + "1", + "-f", + "csv", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--offset", + "1", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_92.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-n", + "0", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-n", + "0", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-n", + "0", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_95.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "0", + "-n", + "0", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "0", + "-n", + "0", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "0", + "-n", + "0", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_98.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "2000", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "2000", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "2000", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_101.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--end", + "0", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--end", + "0", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--end", + "0", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_104.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--offset", + "1", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--offset", + "1", + "-f", + "table", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--offset", + "1", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_107.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-n", + "0", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_110.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "0", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "0", + "-n", + "0", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "0", + "-n", + "0", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_113.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--start", + "2000", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "2000", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--start", + "2000", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_116.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--end", + "0", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--end", + "0", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--end", + "0", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_119.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "--offset", + "1", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--offset", + "1", + "-f", + "ndjson", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "--offset", + "1", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_122.out", + "utf8_collision_77.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliUtf8CollisionTest.ExportCollisionPreservesExistingTargets", + "steps": [ + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_124.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_123.tsfile", + "type": "file", + "source": "fixtures/recorded/25bf81a100c6d89c.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_124.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_124.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "csv", + "-o", + "utf8_collision_124.out/unavailable", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "csv", + "--force", + "-o", + "utf8_collision_124.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_125.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_125.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_125.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "table", + "-o", + "utf8_collision_125.out/unavailable", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "table", + "--force", + "-o", + "utf8_collision_125.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_126.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_126.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_126.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "ndjson", + "-o", + "utf8_collision_126.out/unavailable", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.d", + "--type", + "ndjson", + "--force", + "-o", + "utf8_collision_126.out", + "utf8_collision_123.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_128.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_127.tsfile", + "type": "file", + "source": "fixtures/recorded/cebca58ed56e0aab.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_128.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_128.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "csv", + "-o", + "utf8_collision_128.out/unavailable", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "csv", + "--force", + "-o", + "utf8_collision_128.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_129.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_129.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_129.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "table", + "-o", + "utf8_collision_129.out/unavailable", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "table", + "--force", + "-o", + "utf8_collision_129.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_130.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_130.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_130.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "ndjson", + "-o", + "utf8_collision_130.out/unavailable", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "ndjson", + "--force", + "-o", + "utf8_collision_130.out", + "utf8_collision_127.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliUtf8CollisionTest.MultiExportChecksEveryObjectBeforeCreatingDirectory", + "steps": [ + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "csv", + "--output-dir", + "utf8_collision_export_132", + "utf8_collision_131.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_131.tsfile", + "type": "file", + "source": "fixtures/recorded/d7b49e2bdcff8bb2.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "csv", + "--output-dir", + "utf8_collision_133.out", + "utf8_collision_131.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_133.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "table", + "--output-dir", + "utf8_collision_export_134", + "utf8_collision_131.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "table", + "--output-dir", + "utf8_collision_135.out", + "utf8_collision_131.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_135.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_export_136", + "utf8_collision_131.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "a", + "-d", + "b", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_137.out", + "utf8_collision_131.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_137.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "bad\udcff", + "-d", + "bad\udcfe", + "--type", + "csv", + "--output-dir", + "utf8_collision_export_139", + "utf8_collision_138.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_138.tsfile", + "type": "file", + "source": "fixtures/recorded/e7c20447ea054908.tsfile" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "bad\udcff", + "-d", + "bad\udcfe", + "--type", + "csv", + "--output-dir", + "utf8_collision_140.out", + "utf8_collision_138.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_140.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "bad\udcff", + "-d", + "bad\udcfe", + "--type", + "table", + "--output-dir", + "utf8_collision_export_141", + "utf8_collision_138.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "bad\udcff", + "-d", + "bad\udcfe", + "--type", + "table", + "--output-dir", + "utf8_collision_142.out", + "utf8_collision_138.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_142.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "bad\udcff", + "-d", + "bad\udcfe", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_export_143", + "utf8_collision_138.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "bad\udcff", + "-d", + "bad\udcfe", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_144.out", + "utf8_collision_138.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_144.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "csv", + "--output-dir", + "utf8_collision_export_146", + "utf8_collision_145.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_145.tsfile", + "type": "file", + "source": "fixtures/recorded/d7b0a040cecabf8d.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "csv", + "--output-dir", + "utf8_collision_147.out", + "utf8_collision_145.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_147.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "table", + "--output-dir", + "utf8_collision_export_148", + "utf8_collision_145.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "table", + "--output-dir", + "utf8_collision_149.out", + "utf8_collision_145.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_149.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_export_150", + "utf8_collision_145.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "a", + "-t", + "b", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_151.out", + "utf8_collision_145.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_151.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "bad\udcff", + "-t", + "bad\udcfe", + "--type", + "csv", + "--output-dir", + "utf8_collision_export_153", + "utf8_collision_152.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_152.tsfile", + "type": "file", + "source": "fixtures/recorded/5a1ae43282c6e8d5.tsfile" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "bad\udcff", + "-t", + "bad\udcfe", + "--type", + "csv", + "--output-dir", + "utf8_collision_154.out", + "utf8_collision_152.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_154.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "bad\udcff", + "-t", + "bad\udcfe", + "--type", + "table", + "--output-dir", + "utf8_collision_export_155", + "utf8_collision_152.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "bad\udcff", + "-t", + "bad\udcfe", + "--type", + "table", + "--output-dir", + "utf8_collision_156.out", + "utf8_collision_152.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_156.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "bad\udcff", + "-t", + "bad\udcfe", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_export_157", + "utf8_collision_152.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "bad\udcff", + "-t", + "bad\udcfe", + "--type", + "ndjson", + "--output-dir", + "utf8_collision_158.out", + "utf8_collision_152.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt", + "prepare": [ + { + "path": "utf8_collision_158.out", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + } + ] + }, + { + "id": "CliRequirements.MetadataFailurePrecedesModelOptionValidation", + "steps": [ + { + "args": [ + "ls", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_165.tsfile", + "type": "file", + "source": "fixtures/recorded/627d54d74200f724.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "table1", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "meta", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "table1", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "table1", + "tsfile_cli_fixture_165.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.HelpListsExactlyCurrentCommandSurface", + "steps": [ + { + "args": [ + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.HelpListsExactlyCurrentCommandSurface/001.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples", + "steps": [ + { + "args": [ + "ls", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/001.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/005.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/006.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/007.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/008.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "export", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/009.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "write", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/010.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "--help" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "write", + "-h" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/010.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.SampleIsNotACommand", + "steps": [ + { + "args": [ + "sample", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.SampleIsNotACommand/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.VersionIncludesConcreteBuildMetadata", + "steps": [ + { + "args": [ + "--version" + ], + "exit_code": 0, + "stdout_format": "version", + "stdout": "golden/e2e/CliRequirements.VersionIncludesConcreteBuildMetadata/001.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "require_concrete_commit": true + } + ] + }, + { + "id": "CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--start", + "0", + "--end", + "0", + "-f", + "ndjson", + "tsfile_cli_fixture_166.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_166.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-f", + "json", + "tsfile_cli_fixture_166.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/002.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "tsv", + "tsfile_cli_fixture_166.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/003.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.DuplicateSingletonOptionsAreUsageErrors", + "steps": [ + { + "args": [ + "cat", + "-f", + "csv", + "-f", + "ndjson", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_167.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-n", + "1", + "--limit", + "2", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/002.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--offset", + "0", + "--offset", + "1", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/003.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "0", + "--start", + "1", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/004.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "--end", + "1", + "--end", + "2", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/005.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "table1", + "--type", + "csv", + "-o", + "a.csv", + "--output", + "b.csv", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/006.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "table1", + "--type", + "csv", + "--output-dir", + "a", + "--output-dir", + "b", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/007.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "table1", + "--type", + "csv", + "-o", + "a.csv", + "--force", + "--force", + "tsfile_cli_fixture_167.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/008.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash", + "steps": [ + { + "args": [ + "cat", + "tsfile_cli_fixture_168.tsfile", + "-f", + "csv" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_168.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--", + "tsfile_cli_fixture_168.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1,s2", + "tsfile_cli_fixture_169.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_169.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "-m", + "s1", + "tsfile_cli_fixture_169.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/002.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.MetaOnlyReturnsSizeFormatVersionAndModel", + "steps": [ + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_fixture_170.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.MetaOnlyReturnsSizeFormatVersionAndModel/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_170.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.LsReturnsModelAndObjectFields", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_fixture_171.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.LsReturnsModelAndObjectFields/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_171.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.SchemaReturnsFixedSevenFieldContract", + "steps": [ + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_fixture_172.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_172.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit", + "steps": [ + { + "args": [ + "head", + "-n", + "0", + "--offset", + "1", + "tsfile_cli_fixture_173.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_173.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-n", + "0", + "--offset", + "1", + "tsfile_cli_fixture_173.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "table1", + "--type", + "csv", + "-o", + "tsfile_cli_zero_limit_export_174.csv", + "-n", + "0", + "--offset", + "1", + "tsfile_cli_fixture_173.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.HeadAndCatRequireScopeForMultiObjectFiles", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "-f", + "csv", + "tsfile_cli_multi_table_fixture_175.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.HeadAndCatRequireScopeForMultiObjectFiles/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_multi_table_fixture_175.tsfile", + "type": "file", + "source": "fixtures/recorded/e7e0024a5247b1f7.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "head", + "-m", + "s1", + "-f", + "csv", + "tsfile_cli_multi_table_fixture_175.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.HeadAndCatRequireScopeForMultiObjectFiles/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteUsesExplicitTagAndFieldOptions", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--tag", + "id1", + "STRING", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_req_in_176.csv", + "-o", + "tsfile_cli_req_out_177.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_req_in_176.csv", + "type": "file", + "source": "fixtures/recorded/d083ba5c0e6a1b67.csv" + } + ], + "files": { + "tsfile_cli_req_out_177.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_req_out_177.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "-f", + "csv", + "tsfile_cli_req_out_177.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteMapsInputByHeaderName", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "-i", + "tsfile_cli_header_order_178.csv", + "-o", + "tsfile_cli_header_order_out_179.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_header_order_178.csv", + "type": "file", + "source": "fixtures/recorded/ab6e968534a7e087.csv" + } + ], + "files": { + "tsfile_cli_header_order_out_179.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_header_order_out_179.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteMapsInputByHeaderName/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "csv", + "tsfile_cli_header_order_out_179.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteMapsInputByHeaderName/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "-i", + "tsfile_cli_header_missing_180.csv", + "-o", + "tsfile_cli_header_out_missing_181.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_header_missing_180.csv", + "type": "file", + "source": "fixtures/recorded/7a5d81e3af50bc9a.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "-i", + "tsfile_cli_header_undeclared_182.csv", + "-o", + "tsfile_cli_header_out_undeclared_183.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/002.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_header_missing_180.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_header_undeclared_182.csv", + "type": "file", + "source": "fixtures/recorded/1692892e6fa59720.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "-i", + "tsfile_cli_header_duplicate_184.csv", + "-o", + "tsfile_cli_header_out_duplicate_185.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/003.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_header_undeclared_182.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_header_duplicate_184.csv", + "type": "file", + "source": "fixtures/recorded/32df682cd666de13.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "--field", + "humidity", + "FLOAT", + "--encoding", + "FLOAT", + "GORILLA", + "--compression", + "FLOAT", + "UNCOMPRESSED", + "-i", + "tsfile_cli_type_override_186.csv", + "-o", + "tsfile_cli_type_override_out_187.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_type_override_186.csv", + "type": "file", + "source": "fixtures/recorded/30eb087a88f388c1.csv" + } + ], + "files": { + "tsfile_cli_type_override_out_187.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_type_override_out_187.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-t", + "sensors", + "-f", + "csv", + "tsfile_cli_type_override_out_187.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--field", + "temp", + "FLOAT", + "--encoding", + "FLOAT", + "GORILLA", + "--encoding", + "FLOAT", + "PLAIN", + "--stdin", + "-o", + "unused.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/004.stderr.txt", + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--field", + "temp", + "FLOAT", + "--encoding", + "DOUBLE", + "GORILLA", + "--stdin", + "-o", + "unused.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/005.stderr.txt", + "files": {} + }, + { + "args": [ + "write", + "--table", + "binary_data", + "--field", + "payload", + "BLOB", + "--encoding", + "BLOB", + "GORILLA", + "--stdin", + "-o", + "unused.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/006.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteRejectsExistingOutputWithoutTruncating", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_existing_in_188.csv", + "-o", + "tsfile_cli_existing_out_189.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsExistingOutputWithoutTruncating/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_existing_in_188.csv", + "type": "file", + "source": "fixtures/recorded/3f73b03698921151.csv" + }, + { + "path": "tsfile_cli_existing_out_189.tsfile", + "type": "file", + "source": "fixtures/recorded/c1a66b9d085b4360.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteRejectsNonRegularInputBeforeCreatingOutput", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_input_dir_190", + "-o", + "tsfile_cli_input_dir_out_191.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsNonRegularInputBeforeCreatingOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_input_dir_190", + "type": "directory" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_bad_time_192.csv", + "-o", + "tsfile_cli_bad_time_out_193.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_bad_time_192.csv", + "type": "file", + "source": "fixtures/recorded/0fbee3b1c70b3081.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_bad_time_194.csv", + "-o", + "tsfile_cli_bad_time_out_195.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/002.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_bad_time_192.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_bad_time_194.csv", + "type": "file", + "source": "fixtures/recorded/7c94f08bcfc8bf1f.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_bad_time_196.csv", + "-o", + "tsfile_cli_bad_time_out_197.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/003.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_bad_time_194.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_bad_time_196.csv", + "type": "file", + "source": "fixtures/recorded/38d1a142bdf82d96.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteTargetFailuresAreRuntimeErrors", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_target_198.csv", + "-o", + "tsfile_cli_target_198.csv" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_target_198.csv", + "type": "file", + "source": "fixtures/recorded/59b2d6c45e72adb4.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_target_198.csv", + "-o", + "tsfile_cli_missing_parent_199/out.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/002.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "-i", + "tsfile_cli_tag_null_200.csv", + "-o", + "tsfile_cli_tag_null_out_201.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_tag_null_200.csv", + "type": "file", + "source": "fixtures/recorded/3497e1b9bed50133.csv" + } + ], + "files": { + "tsfile_cli_tag_null_out_201.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_tag_null_out_201.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "ndjson", + "tsfile_cli_tag_null_out_201.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-t", + "sensors", + "-m", + "site", + "-f", + "csv", + "tsfile_cli_tag_null_out_201.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteRejectsUnterminatedQuotedCsvField", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "-i", + "tsfile_cli_unclosed_quote_202.csv", + "-o", + "tsfile_cli_unclosed_quote_out_203.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsUnterminatedQuotedCsvField/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_unclosed_quote_202.csv", + "type": "file", + "source": "fixtures/recorded/5fbbb88cc56b243a.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.LegacyColumnsOptionIsRejected", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--columns", + "legacy", + "-o", + "x.tsfile", + "--stdin" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.LegacyColumnsOptionIsRejected/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.WriteRejectsImplicitInputAndFormatFlag", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-o", + "x.tsfile", + "in.csv" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/001.stderr.txt", + "files": {} + }, + { + "args": [ + "write", + "--table", + "t1", + "--field", + "s1", + "INT64", + "-f", + "csv", + "--stdin", + "-o", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/002.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.ExportWritesSingleObjectAtomically", + "steps": [ + { + "args": [ + "export", + "-t", + "table1", + "-o", + "tsfile_cli_export_205.csv", + "--type", + "csv", + "-m", + "s1", + "tsfile_cli_fixture_204.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_204.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": { + "tsfile_cli_export_205.csv": { + "type": "file", + "source": "golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt" + } + } + }, + { + "args": [ + "cat", + "-t", + "table1", + "-m", + "s1", + "-f", + "csv", + "tsfile_cli_fixture_204.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets", + "steps": [ + { + "args": [ + "export", + "-t", + "table1", + "-o", + "tsfile_cli_export_link_208.csv", + "--type", + "csv", + "--force", + "tsfile_cli_fixture_206.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_export_link_208.csv", + "type": "symlink", + "target": "tsfile_cli_export_sentinel_207.txt" + }, + { + "path": "tsfile_cli_export_sentinel_207.txt", + "type": "file", + "source": "fixtures/recorded/2b7847b7b705781d.txt" + }, + { + "path": "tsfile_cli_fixture_206.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "table1", + "-o", + "tsfile_cli_export_fifo_209.csv", + "--type", + "csv", + "--force", + "tsfile_cli_fixture_206.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/002.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_export_fifo_209.csv", + "type": "fifo" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + } + ] + }, + { + "id": "CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles", + "steps": [ + { + "args": [ + "export", + "-t", + "sensors_a", + "-t", + "sensors_b", + "--output-dir", + "tsfile_cli_multi_export_211", + "--type", + "csv", + "-m", + "s1", + "tsfile_cli_multi_table_fixture_210.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_multi_table_fixture_210.tsfile", + "type": "file", + "source": "fixtures/recorded/e7e0024a5247b1f7.tsfile" + } + ], + "files": { + "tsfile_cli_multi_export_211": { + "type": "directory" + }, + "tsfile_cli_multi_export_211/0001.csv": { + "type": "file", + "source": "golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0001.csv.txt" + }, + "tsfile_cli_multi_export_211/0002.csv": { + "type": "file", + "source": "golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0002.csv.txt" + }, + "tsfile_cli_multi_export_211/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001._manifest.json.txt" + } + } + } + ] + }, + { + "id": "CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "eq", + "dev_a", + "--tag-filter", + "id1", + "eq", + "dev_c", + "-f", + "csv", + "tsfile_cli_tag_filter_fixture_212.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_tag_filter_fixture_212.tsfile", + "type": "file", + "source": "fixtures/recorded/3098941db5f6f150.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "eq", + "dev_a", + "--tag-filter", + "id1", + "eq", + "dev_c", + "--tag-match", + "any", + "-f", + "csv", + "tsfile_cli_tag_filter_fixture_212.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.SketchRejectsRegularResultFormat", + "steps": [ + { + "args": [ + "sketch", + "-f", + "csv", + "tsfile_cli_fixture_213.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.SketchRejectsRegularResultFormat/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_213.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliRequirements.SketchWritesStdoutAndAtomicOutput", + "steps": [ + { + "args": [ + "sketch", + "tsfile_cli_fixture_214.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_214.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "sketch", + "-o", + "tsfile_cli_sketch_215.txt", + "tsfile_cli_fixture_214.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_sketch_215.txt": { + "type": "file", + "source": "golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/001.stdout.txt" + } + } + }, + { + "args": [ + "sketch", + "-o", + "tsfile_cli_sketch_215.txt", + "tsfile_cli_fixture_214.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/003.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_sketch_215.txt", + "type": "file", + "source": "fixtures/recorded/8cd34bf42ce458c6.txt" + } + ], + "files": {} + }, + { + "args": [ + "sketch", + "-o", + "tsfile_cli_sketch_215.txt", + "--force", + "tsfile_cli_fixture_214.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_sketch_215.txt": { + "type": "file", + "source": "golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/001.stdout.txt" + } + } + }, + { + "args": [ + "sketch", + "-o", + "tsfile_cli_fixture_214.tsfile", + "--force", + "tsfile_cli_fixture_214.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/005.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliRequirements.ModelDetectionPrefersTableSchemaAndFallsBackToTree", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_fixture_216.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.LsReturnsModelAndObjectFields/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_216.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_sparse_tree_217.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.ModelDetectionPrefersTableSchemaAndFallsBackToTree/002.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_sparse_tree_217.tsfile", + "type": "file", + "source": "fixtures/recorded/b6251665e053a224.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "RunCliTest.VersionFlagPrintsVersionAndReturnsOk", + "steps": [ + { + "args": [ + "--version" + ], + "exit_code": 0, + "stdout_format": "version", + "stdout": "golden/e2e/CliRequirements.VersionIncludesConcreteBuildMetadata/001.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.VersionMustAppearByItself", + "steps": [ + { + "args": [ + "cat", + "--version", + "data.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.VersionMustAppearByItself/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.TopLevelHelpMustAppearByItself", + "steps": [ + { + "args": [ + "--help", + "cat" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.TopLevelHelpMustAppearByItself/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.CommandHelpMustAppearByItself", + "steps": [ + { + "args": [ + "cat", + "--help", + "data.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.CommandHelpMustAppearByItself/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.NoArgsPrintsUsageToErrAndReturnsUsageError", + "steps": [ + { + "args": [], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.HelpListsExactlyCurrentCommandSurface/001.stdout.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.UnknownCommandIsUsageError", + "steps": [ + { + "args": [ + "frobnicate", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.UnknownCommandIsUsageError/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.LeadingOptionBeforeCommandIsClearError", + "steps": [ + { + "args": [ + "-f", + "ndjson", + "meta", + "data.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.LeadingOptionBeforeCommandIsClearError/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.SelectIsNoLongerKnownCommand", + "steps": [ + { + "args": [ + "select", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.SelectIsNoLongerKnownCommand/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.SeedOnCatIsUsageError", + "steps": [ + { + "args": [ + "cat", + "--seed", + "7", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.SeedOnCatIsUsageError/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "RunCliTest.SampleIsUnknownCommand", + "steps": [ + { + "args": [ + "sample", + "--offset", + "2", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.SampleIsNotACommand/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.LsListsTableNameTsv", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_fixture_218.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.LsReturnsModelAndObjectFields/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_218.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.LsRejectsNoHeader", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "--no-header", + "tsfile_cli_fixture_219.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.LsRejectsNoHeader/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_219.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.OpenMissingFileReturnsFileError", + "steps": [ + { + "args": [ + "ls", + "definitely_missing.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.OpenMissingFileReturnsFileError/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.SchemaShowsFieldColumnAndType", + "steps": [ + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_fixture_220.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_220.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.SchemaTableMeasurementFilterOnlyShowsRequestedColumn", + "steps": [ + { + "args": [ + "schema", + "-m", + "s1", + "-f", + "csv", + "tsfile_cli_fixture_221.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.SchemaTableMeasurementFilterOnlyShowsRequestedColumn/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_221.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.SchemaTableMeasurementFilterIsCaseInsensitive", + "steps": [ + { + "args": [ + "schema", + "-m", + "S1", + "-f", + "csv", + "tsfile_cli_fixture_222.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.SchemaTableMeasurementFilterOnlyShowsRequestedColumn/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_222.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.SchemaRejectsMissingTableBeforeWritingOutput", + "steps": [ + { + "args": [ + "schema", + "-t", + "missing", + "-f", + "csv", + "tsfile_cli_fixture_223.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.SchemaRejectsMissingTableBeforeWritingOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_223.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.StatsReportsCountAndTimeRange", + "steps": [ + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_fixture_224.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.StatsReportsCountAndTimeRange/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_224.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.StatsReportsNumericNullCountForTableFields", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "FLOAT", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_null_count_225.csv", + "-o", + "tsfile_cli_null_count_226.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_null_count_225.csv", + "type": "file", + "source": "fixtures/recorded/dfb06bb1a4e09036.csv" + } + ], + "files": { + "tsfile_cli_null_count_226.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_null_count_226.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "sensors", + "-m", + "note", + "-f", + "csv", + "tsfile_cli_null_count_226.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.HeadProjectsAndLimits", + "steps": [ + { + "args": [ + "head", + "-m", + "s1", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_fixture_227.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.HeadProjectsAndLimits/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_227.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CatReturnsAllRows", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "-f", + "csv", + "tsfile_cli_fixture_228.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_228.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery", + "steps": [ + { + "args": [ + "cat", + "-m", + "missing", + "-f", + "csv", + "tsfile_cli_fixture_229.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_229.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "id1", + "-f", + "csv", + "tsfile_cli_fixture_229.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/002.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.CatTableProjectionIsCaseInsensitive", + "steps": [ + { + "args": [ + "cat", + "-m", + "S1", + "-f", + "csv", + "tsfile_cli_fixture_230.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_230.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CatPushesDownOffsetAndLimit", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--offset", + "2", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_fixture_231.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CatPushesDownOffsetAndLimit/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_231.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.HeadPushesDownOffsetAndLimit", + "steps": [ + { + "args": [ + "head", + "-m", + "s1", + "--offset", + "1", + "-n", + "3", + "-f", + "csv", + "tsfile_cli_fixture_232.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.HeadPushesDownOffsetAndLimit/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_232.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CatWithTimeRange", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--start", + "2", + "--end", + "3", + "-f", + "csv", + "tsfile_cli_fixture_233.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CatPushesDownOffsetAndLimit/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_233.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CatAppliesOffsetAfterTimeRange", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--start", + "1", + "--end", + "4", + "--offset", + "1", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_fixture_234.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CatPushesDownOffsetAndLimit/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_234.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CatFiltersRowsByTagEq", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "eq", + "dev_b", + "-f", + "csv", + "tsfile_cli_tag_filter_fixture_235.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CatFiltersRowsByTagEq/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_tag_filter_fixture_235.tsfile", + "type": "file", + "source": "fixtures/recorded/3098941db5f6f150.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.HeadFiltersRowsByTagRegexp", + "steps": [ + { + "args": [ + "head", + "-m", + "s1", + "--tag-filter", + "id1", + "regexp", + "dev_[bc]", + "-n", + "10", + "-f", + "csv", + "tsfile_cli_tag_filter_fixture_236.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.HeadFiltersRowsByTagRegexp/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_tag_filter_fixture_236.tsfile", + "type": "file", + "source": "fixtures/recorded/3098941db5f6f150.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.TagFilterRejectsFieldColumn", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "s1", + "eq", + "20", + "-f", + "csv", + "tsfile_cli_tag_filter_fixture_237.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.TagFilterRejectsFieldColumn/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_tag_filter_fixture_237.tsfile", + "type": "file", + "source": "fixtures/recorded/3098941db5f6f150.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "is-null", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_238.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_nullable_tag_filter_fixture_238.tsfile", + "type": "file", + "source": "fixtures/recorded/8c384af9ff83865c.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "eq", + "", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_238.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "eq", + "null", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_238.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "not-null", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_238.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "neq", + "dev_a", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_238.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/005.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "regexp", + "dev", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_239.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_nullable_tag_filter_fixture_239.tsfile", + "type": "file", + "source": "fixtures/recorded/8c384af9ff83865c.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "regexp", + "dev_.*", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_239.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "regexp", + "[", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_239.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/003.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.MultipleTagFiltersHonorAll", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--tag-filter", + "id1", + "neq", + "dev_a", + "--tag-filter", + "id1", + "regexp", + "dev_.*", + "--tag-match", + "all", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_240.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.MultipleTagFiltersHonorAll/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_nullable_tag_filter_fixture_240.tsfile", + "type": "file", + "source": "fixtures/recorded/8c384af9ff83865c.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.RowWindowDistinguishesExactAndExcessiveOffset", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--offset", + "5", + "-f", + "csv", + "tsfile_cli_fixture_241.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_241.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "--offset", + "6", + "-f", + "csv", + "tsfile_cli_fixture_241.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/002.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.ZeroLimitUsesEachFormatsZeroRowContract", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "-n", + "0", + "-f", + "csv", + "tsfile_cli_fixture_242.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_242.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "-n", + "0", + "-f", + "ndjson", + "tsfile_cli_fixture_242.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "-n", + "0", + "-f", + "table", + "tsfile_cli_fixture_242.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.ZeroLimitUsesEachFormatsZeroRowContract/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.CatJsonIsNdjson", + "steps": [ + { + "args": [ + "cat", + "-m", + "s1", + "--start", + "0", + "--end", + "0", + "-f", + "ndjson", + "tsfile_cli_fixture_243.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_243.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.MetaReportsFileSummary", + "steps": [ + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_fixture_245.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.MetaOnlyReturnsSizeFormatVersionAndModel/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_245.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.MetaReportsFileHeaderVersionWithoutConstrainingReader", + "steps": [ + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_sparse_tree_246.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.MetaReportsFileHeaderVersionWithoutConstrainingReader/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_sparse_tree_246.tsfile", + "type": "file", + "source": "fixtures/recorded/1b1a5cfd0890f477.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CountReportsColumnCountsWithoutSummaryRows", + "steps": [ + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_fixture_247.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountReportsColumnCountsWithoutSummaryRows/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_247.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.CountAndStatsDefaultToAllTables", + "steps": [ + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_multi_table_fixture_248.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_multi_table_fixture_248.tsfile", + "type": "file", + "source": "fixtures/recorded/e7e0024a5247b1f7.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_multi_table_fixture_248.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables", + "steps": [ + { + "args": [ + "count", + "-m", + "S1", + "-f", + "csv", + "tsfile_cli_disjoint_table_fixture_249.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_disjoint_table_fixture_249.tsfile", + "type": "file", + "source": "fixtures/recorded/5d51538ae37766cf.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "stats", + "-m", + "S1", + "-f", + "csv", + "tsfile_cli_disjoint_table_fixture_249.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices", + "steps": [ + { + "args": [ + "count", + "-m", + "left", + "-f", + "csv", + "tsfile_cli_disjoint_tree_250.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_disjoint_tree_250.tsfile", + "type": "file", + "source": "fixtures/recorded/02e7ee891c98c640.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "stats", + "-m", + "left", + "-f", + "csv", + "tsfile_cli_disjoint_tree_250.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.TreeCountAndStatsUseDeviceTimestampUnion", + "steps": [ + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_sparse_tree_251.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_sparse_tree_251.tsfile", + "type": "file", + "source": "fixtures/recorded/b6251665e053a224.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_sparse_tree_251.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames", + "steps": [ + { + "args": [ + "head", + "-m", + "left", + "-n", + "1", + "-f", + "ndjson", + "tsfile_cli_sparse_tree_252.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_sparse_tree_252.tsfile", + "type": "file", + "source": "fixtures/recorded/b6251665e053a224.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "tsfile_cli_sparse_tree_252.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.MetadataTableFilterIsCaseInsensitive", + "steps": [ + { + "args": [ + "schema", + "-t", + "TABLE1", + "-f", + "csv", + "tsfile_cli_fixture_253.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_253.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "count", + "-t", + "TABLE1", + "-f", + "csv", + "tsfile_cli_fixture_253.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.CountReportsColumnCountsWithoutSummaryRows/001.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "TABLE1", + "-f", + "csv", + "tsfile_cli_fixture_253.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.StatsReportsCountAndTimeRange/001.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteThenReadRoundTrip", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--tag", + "id1", + "STRING", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_write_in_254.csv", + "-o", + "tsfile_cli_write_out_255.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_write_in_254.csv", + "type": "file", + "source": "fixtures/recorded/ea9c53e37f6ee36c.csv" + } + ], + "files": { + "tsfile_cli_write_out_255.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_write_out_255.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteThenReadRoundTrip/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_write_out_255.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteThenReadRoundTrip/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-m", + "s1", + "-f", + "csv", + "tsfile_cli_write_out_255.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteThenReadRoundTrip/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteThenReadFloatDoubleRoundTripLossless", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--tag", + "id1", + "STRING", + "--field", + "f1", + "FLOAT", + "--field", + "d1", + "DOUBLE", + "-i", + "tsfile_cli_fp_in_256.csv", + "-o", + "tsfile_cli_fp_out_257.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fp_in_256.csv", + "type": "file", + "source": "fixtures/recorded/3681eaaa9dd04162.csv" + } + ], + "files": { + "tsfile_cli_fp_out_257.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_fp_out_257.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteThenReadFloatDoubleRoundTripLossless/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_fp_out_257.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteThenReadFloatDoubleRoundTripLossless/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--tag", + "id1", + "STRING", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_nl_in_258.csv", + "-o", + "tsfile_cli_nl_out_259.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_nl_in_258.csv", + "type": "file", + "source": "fixtures/recorded/32bf457d65422f93.csv" + } + ], + "files": { + "tsfile_cli_nl_out_259.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_nl_out_259.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_nl_out_259.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_nl_out_259.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteMissingColumnsIsUsageError", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "-o", + "x.tsfile", + "in.csv" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteMissingColumnsIsUsageError/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsOutOfOrderTimestampsAndLeavesNoOutput", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_ooo_260.csv", + "-o", + "tsfile_cli_ooo_out_261.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsOutOfOrderTimestampsAndLeavesNoOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ooo_260.csv", + "type": "file", + "source": "fixtures/recorded/df3a55081911cd32.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteAllowsSameTimestampAcrossDevices", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "id", + "STRING", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_md_262.csv", + "-o", + "tsfile_cli_md_out_263.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_md_262.csv", + "type": "file", + "source": "fixtures/recorded/fda14729ef2687ab.csv" + } + ], + "files": { + "tsfile_cli_md_out_263.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_md_out_263.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_md_out_263.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsOutputEqualsInput", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_alias_264.csv", + "-o", + "tsfile_cli_alias_264.csv" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsOutputEqualsInput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_alias_264.csv", + "type": "file", + "source": "fixtures/recorded/59b2d6c45e72adb4.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteFailureOnBadValueLeavesNoOutput", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_badval_265.csv", + "-o", + "tsfile_cli_badval_out_266.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteFailureOnBadValueLeavesNoOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_badval_265.csv", + "type": "file", + "source": "fixtures/recorded/891a43b84b1ac825.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsDuplicateColumnNames", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "--field", + "s1", + "INT64", + "--stdin", + "-o", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsDuplicateColumnNames/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsTagOnlySchema", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "id", + "STRING", + "--stdin", + "-o", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsTagOnlySchema/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsNonStringTag", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "id", + "INT64", + "--field", + "s1", + "INT64", + "--stdin", + "-o", + "x.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsNonStringTag/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteNormalizesNamesAndHeaderCase", + "steps": [ + { + "args": [ + "write", + "--table", + "Mixed", + "--tag", + "Id", + "STRING", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_case_267.csv", + "-o", + "tsfile_cli_case_out_268.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_case_267.csv", + "type": "file", + "source": "fixtures/recorded/9f14fda22c4e2ba7.csv" + } + ], + "files": { + "tsfile_cli_case_out_268.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_case_out_268.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_case_out_268.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsHeaderMatchWithNoHeader", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-o", + "x.tsfile", + "--stdin", + "--no-header", + "--header-match" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsHeaderMatchWithNoHeader/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.ReadRejectsWriteOnlyFlag", + "steps": [ + { + "args": [ + "ls", + "-o", + "x.tsfile", + "tsfile_cli_fixture_269.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.ReadRejectsWriteOnlyFlag/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_269.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.ReadRejectsWriteColumnFlags", + "steps": [ + { + "args": [ + "ls", + "--field", + "s1", + "INT64", + "tsfile_cli_fixture_270.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.ReadRejectsWriteColumnFlags/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_270.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.MetaRejectsDeviceScopeFlag", + "steps": [ + { + "args": [ + "meta", + "-d", + "dev", + "tsfile_cli_fixture_271.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.MetaRejectsDeviceScopeFlag/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_271.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.SchemaTableShowsEncodingAndCompression", + "steps": [ + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_fixture_272.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_272.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsInt32Overflow", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT32", + "-i", + "tsfile_cli_ovf_273.csv", + "-o", + "tsfile_cli_ovf_out_274.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsInt32Overflow/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_273.csv", + "type": "file", + "source": "fixtures/recorded/443d44fab5249879.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteAcceptsInt32Boundary", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT32", + "-i", + "tsfile_cli_ovf_275.csv", + "-o", + "tsfile_cli_ovf_out_276.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_275.csv", + "type": "file", + "source": "fixtures/recorded/80388eb9de4a9e91.csv" + } + ], + "files": { + "tsfile_cli_ovf_out_276.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_ovf_out_276.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteAcceptsInt32Boundary/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsInt64Overflow", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_ovf_277.csv", + "-o", + "tsfile_cli_ovf_out_278.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsInt64Overflow/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_277.csv", + "type": "file", + "source": "fixtures/recorded/21040fc546353838.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsDoubleOverflow", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "DOUBLE", + "-i", + "tsfile_cli_ovf_279.csv", + "-o", + "tsfile_cli_ovf_out_280.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsDoubleOverflow/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_279.csv", + "type": "file", + "source": "fixtures/recorded/e5721dc3ee3437dd.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsNonNumericInt64", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_ovf_281.csv", + "-o", + "tsfile_cli_ovf_out_282.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsNonNumericInt64/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_281.csv", + "type": "file", + "source": "fixtures/recorded/04fb4d7ce9cd9f35.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteDateRequiresStrictIsoLexicalForm", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "DATE", + "-i", + "tsfile_cli_ovf_283.csv", + "-o", + "tsfile_cli_ovf_out_284.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_283.csv", + "type": "file", + "source": "fixtures/recorded/e2ca60a29f45f9e6.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "DATE", + "-i", + "tsfile_cli_ovf_285.csv", + "-o", + "tsfile_cli_ovf_out_286.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/002.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_283.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_ovf_285.csv", + "type": "file", + "source": "fixtures/recorded/280cb420cebd39d7.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "DATE", + "-i", + "tsfile_cli_ovf_287.csv", + "-o", + "tsfile_cli_ovf_out_288.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_285.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_ovf_287.csv", + "type": "file", + "source": "fixtures/recorded/6e073691a8e066e5.csv" + } + ], + "files": { + "tsfile_cli_ovf_out_288.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_ovf_out_288.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/004.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteAcceptsOneLeadingUtf8Bom", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_bom_289.csv", + "-o", + "tsfile_cli_bom_out_290.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_bom_289.csv", + "type": "file", + "source": "fixtures/recorded/decdfb5a1f49df91.csv" + } + ], + "files": { + "tsfile_cli_bom_out_290.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_bom_out_290.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteAcceptsOneLeadingUtf8Bom/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_bad_utf8_291.csv", + "-o", + "tsfile_cli_bad_utf8_out_292.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_bad_utf8_291.csv", + "type": "file", + "source": "fixtures/recorded/50568f65241e50ce.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_bad_utf8_293.csv", + "-o", + "tsfile_cli_bad_utf8_out_294.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_bad_utf8_291.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_bad_utf8_293.csv", + "type": "file", + "source": "fixtures/recorded/c084f0d9b5cc00bc.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsReservedAndControlCharacterNames", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "time", + "INT64", + "--stdin", + "-o", + "unused.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/001.stderr.txt", + "files": {} + }, + { + "args": [ + "write", + "--table", + "bad\nname", + "--field", + "s1", + "INT64", + "--stdin", + "-o", + "unused.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/002.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteFailurePreservesExistingTarget", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_existing_295.csv", + "-o", + "tsfile_cli_existing_out_296.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteFailurePreservesExistingTarget/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_existing_295.csv", + "type": "file", + "source": "fixtures/recorded/59b2d6c45e72adb4.csv" + }, + { + "path": "tsfile_cli_existing_out_296.tsfile", + "type": "file", + "source": "fixtures/recorded/2b7847b7b705781d.txt" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsOutOfOrderAcrossBatches", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_xbatch_297.csv", + "-o", + "tsfile_cli_xbatch_out_298.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsOutOfOrderAcrossBatches/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_xbatch_297.csv", + "type": "file", + "source": "fixtures/recorded/001a55cd3aa30703.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteStreamsLargeInputRoundTrips", + "steps": [ + { + "args": [ + "write", + "--table", + "big", + "--field", + "s1", + "INT64", + "-i", + "tsfile_cli_large_299.csv", + "-o", + "tsfile_cli_large_out_300.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_large_299.csv", + "type": "file", + "source": "fixtures/recorded/de21dc67151aafff.csv" + } + ], + "files": { + "tsfile_cli_large_out_300.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_large_out_300.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_large_out_300.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.HelpWithPositionalFileIsUsageError", + "steps": [ + { + "args": [ + "cat", + "--help", + "tsfile_cli_fixture_301.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/RunCliTest.CommandHelpMustAppearByItself/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_301.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.StatsRejectsRowOnlyFlag", + "steps": [ + { + "args": [ + "stats", + "--start", + "1", + "tsfile_cli_fixture_302.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.StatsRejectsRowOnlyFlag/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_302.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.LsRejectsMeasurementsFlag", + "steps": [ + { + "args": [ + "ls", + "-m", + "s1", + "tsfile_cli_fixture_303.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.LsRejectsMeasurementsFlag/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fixture_303.tsfile", + "type": "file", + "source": "fixtures/recorded/a7e15add9795acb0.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRoundTripsTimestampDateBlob", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--tag", + "id1", + "STRING", + "--field", + "ts1", + "TIMESTAMP", + "--field", + "d1", + "DATE", + "--field", + "b1", + "BLOB", + "-o", + "tsfile_cli_tdb_out_305.tsfile", + "-i", + "tsfile_cli_tdb_304.csv" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_tdb_304.csv", + "type": "file", + "source": "fixtures/recorded/b7aa5a377f9d473e.csv" + } + ], + "files": { + "tsfile_cli_tdb_out_305.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_tdb_out_305.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "tsfile_cli_tdb_out_305.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsBadDate", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "DATE", + "-i", + "tsfile_cli_ovf_306.csv", + "-o", + "tsfile_cli_ovf_out_307.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsBadDate/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_306.csv", + "type": "file", + "source": "fixtures/recorded/4437ed311b6ffac5.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteVerboseEchoesConfig", + "steps": [ + { + "args": [ + "write", + "--table", + "vt", + "--field", + "s1", + "INT64", + "-v", + "-i", + "tsfile_cli_vb_308.csv", + "-o", + "tsfile_cli_vb_out_309.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteVerboseEchoesConfig/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_vb_308.csv", + "type": "file", + "source": "fixtures/recorded/59b2d6c45e72adb4.csv" + } + ], + "files": { + "tsfile_cli_vb_out_309.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_vb_out_309.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteAcceptsOneLeadingUtf8Bom/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsHeaderMatch", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "INT64", + "--header-match", + "-i", + "tsfile_cli_hm_310.csv", + "-o", + "tsfile_cli_hm_out_311.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsHeaderMatchWithNoHeader/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_hm_310.csv", + "type": "file", + "source": "fixtures/recorded/3a22c3d57d16053e.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteMapsEachColumnToItsOwnValue", + "steps": [ + { + "args": [ + "write", + "--table", + "t1", + "--field", + "a_bool", + "BOOLEAN", + "--field", + "b_int", + "INT32", + "--field", + "c_long", + "INT64", + "--field", + "d_float", + "FLOAT", + "--field", + "e_double", + "DOUBLE", + "--field", + "f_str", + "STRING", + "--field", + "g_ts", + "TIMESTAMP", + "--field", + "h_date", + "DATE", + "-i", + "tsfile_cli_colmap_312.csv", + "-o", + "tsfile_cli_colmap_out_313.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_colmap_312.csv", + "type": "file", + "source": "fixtures/recorded/0a285e57e7770abd.csv" + } + ], + "files": { + "tsfile_cli_colmap_out_313.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_colmap_out_313.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteMapsEachColumnToItsOwnValue/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_colmap_out_313.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteMapsEachColumnToItsOwnValue/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteMultiTypeAcrossBatchesRoundTrips", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "id", + "STRING", + "--field", + "n", + "INT64", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_mtb_314.csv", + "-o", + "tsfile_cli_mtb_out_315.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_mtb_314.csv", + "type": "file", + "source": "fixtures/recorded/9fe4acf66641a6f7.csv" + } + ], + "files": { + "tsfile_cli_mtb_out_315.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_mtb_out_315.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_mtb_out_315.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "--start", + "2400", + "--end", + "2400", + "-f", + "ndjson", + "tsfile_cli_mtb_out_315.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRoundTripsQuotedSpecialChars", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "id", + "STRING", + "--field", + "note", + "STRING", + "-i", + "tsfile_cli_special_316.csv", + "-o", + "tsfile_cli_special_out_317.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_special_316.csv", + "type": "file", + "source": "fixtures/recorded/856f46a20c5f7c7b.csv" + } + ], + "files": { + "tsfile_cli_special_out_317.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_special_out_317.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteRoundTripsQuotedSpecialChars/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_special_out_317.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteRoundTripsQuotedSpecialChars/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsTimestampOverflow", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "TIMESTAMP", + "-i", + "tsfile_cli_ovf_318.csv", + "-o", + "tsfile_cli_ovf_out_319.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsTimestampOverflow/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_318.csv", + "type": "file", + "source": "fixtures/recorded/21040fc546353838.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsNonNumericTimestampColumn", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "TIMESTAMP", + "-i", + "tsfile_cli_ovf_320.csv", + "-o", + "tsfile_cli_ovf_out_321.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsNonNumericTimestampColumn/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_320.csv", + "type": "file", + "source": "fixtures/recorded/77d5cdbf284147c1.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteRejectsImpossibleDate", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "DATE", + "-i", + "tsfile_cli_ovf_322.csv", + "-o", + "tsfile_cli_ovf_out_323.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliE2E.WriteRejectsImpossibleDate/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_322.csv", + "type": "file", + "source": "fixtures/recorded/be1a2fdc5942bebd.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteAcceptsDateBoundary", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--field", + "s1", + "DATE", + "-i", + "tsfile_cli_ovf_324.csv", + "-o", + "tsfile_cli_ovf_out_325.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_ovf_324.csv", + "type": "file", + "source": "fixtures/recorded/6e073691a8e066e5.csv" + } + ], + "files": { + "tsfile_cli_ovf_out_325.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_ovf_out_325.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/004.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteDistinguishesCsvNullAndEmptyString", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "id", + "STRING", + "--field", + "n", + "INT64", + "-i", + "tsfile_cli_null_326.csv", + "-o", + "tsfile_cli_null_out_327.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_null_326.csv", + "type": "file", + "source": "fixtures/recorded/c7da5b75d91e3488.csv" + } + ], + "files": { + "tsfile_cli_null_out_327.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_null_out_327.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteDistinguishesCsvNullAndEmptyString/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_null_out_327.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteDistinguishesCsvNullAndEmptyString/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_utf8_names_328.tsfile", + "type": "file", + "source": "fixtures/recorded/8b4b9aa145a1d812.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.device\udcff", + "-m", + "value\udce1\udc80", + "-f", + "csv", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/005.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-d", + "root.device\udcff", + "-m", + "value\udce1\udc80", + "-f", + "csv", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/005.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "root.device\udcff", + "--type", + "csv", + "-o", + "tsfile_cli_utf8_export_329.csv", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_utf8_export_329.csv": { + "type": "file", + "source": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/005.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/008.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_utf8_export_329.csv", + "type": "absent" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/009.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/010.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/011.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.device\udcff", + "-m", + "value\udce1\udc80", + "-f", + "ndjson", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-d", + "root.device\udcff", + "-m", + "value\udce1\udc80", + "-f", + "ndjson", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "root.device\udcff", + "--type", + "ndjson", + "-o", + "tsfile_cli_utf8_export_330.ndjson", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_utf8_export_330.ndjson": { + "type": "file", + "source": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/015.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_utf8_export_330.ndjson", + "type": "absent" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/016.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/017.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/018.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.device\udcff", + "-m", + "value\udce1\udc80", + "-f", + "table", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/019.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-d", + "root.device\udcff", + "-m", + "value\udce1\udc80", + "-f", + "table", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/019.stdout.txt", + "stderr": "golden/empty.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "root.device\udcff", + "--type", + "table", + "-o", + "tsfile_cli_utf8_export_331.table", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_utf8_export_331.table": { + "type": "file", + "source": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/019.stdout.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "sketch", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/022.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_utf8_export_331.table", + "type": "absent" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.device\udcff", + "-d", + "root.\u4e2d\u6587", + "--type", + "ndjson", + "--output-dir", + "tsfile_cli_utf8_manifest_332", + "tsfile_cli_utf8_names_328.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_utf8_manifest_332": { + "type": "directory" + }, + "tsfile_cli_utf8_manifest_332/0001.ndjson": { + "type": "file", + "source": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt" + }, + "tsfile_cli_utf8_manifest_332/0002.ndjson": { + "type": "file", + "source": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023.0002.ndjson.txt" + }, + "tsfile_cli_utf8_manifest_332/_manifest.json": { + "type": "file", + "source": "golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023._manifest.json.txt" + } + }, + "posix_only": "Requires POSIX special files or raw byte arguments" + } + ] + }, + { + "id": "CliE2E.Utf8JsonKeyCollisionsFailWithoutPublishingOutput", + "steps": [ + { + "args": [ + "head", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\udcfe", + "-f", + "ndjson", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_utf8_collision_333.tsfile", + "type": "file", + "source": "fixtures/recorded/f6209221447efc09.tsfile" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "head", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\udcfe", + "-f", + "ndjson", + "--start", + "0", + "-n", + "0", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "head", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\ufffd", + "-f", + "ndjson", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "head", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\ufffd", + "-f", + "ndjson", + "--start", + "0", + "-n", + "0", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\udcfe", + "-f", + "ndjson", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\udcfe", + "-f", + "ndjson", + "--start", + "0", + "-n", + "0", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\ufffd", + "-f", + "ndjson", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "-d", + "root.collision", + "-m", + "bad\udcff", + "-m", + "bad\ufffd", + "-f", + "ndjson", + "--start", + "0", + "-n", + "0", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-d", + "root.collision", + "--type", + "ndjson", + "-o", + "tsfile_cli_utf8_collision_export_334.ndjson", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.collision", + "--type", + "ndjson", + "-o", + "tsfile_cli_utf8_collision_export_334.ndjson", + "--force", + "tsfile_cli_utf8_collision_333.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_utf8_collision_export_334.ndjson", + "type": "file", + "source": "fixtures/recorded/11b77be68feb2859.out" + } + ], + "files": {} + } + ] + }, + { + "id": "CliE2E.TableUtf8JsonKeyCollisionsFailInRowsAndStats", + "steps": [ + { + "args": [ + "head", + "-t", + "collision", + "-f", + "ndjson", + "tsfile_cli_utf8_table_collision_335.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_utf8_table_collision_335.tsfile", + "type": "file", + "source": "fixtures/recorded/87d4e8b040a0e258.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-t", + "collision", + "-f", + "ndjson", + "tsfile_cli_utf8_table_collision_335.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-t", + "collision", + "-f", + "ndjson", + "tsfile_cli_utf8_table_collision_335.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteCatCsvWritePreservesLeadingBackslashes", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "site", + "STRING", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_slash_input_336.csv", + "-o", + "tsfile_cli_slash_first_337.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_slash_input_336.csv", + "type": "file", + "source": "fixtures/recorded/bac2896165b44e56.csv" + } + ], + "files": { + "tsfile_cli_slash_first_337.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_slash_first_337.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t", + "-f", + "ndjson", + "tsfile_cli_slash_first_337.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t", + "-f", + "csv", + "tsfile_cli_slash_first_337.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "write", + "--table", + "t", + "--tag", + "site", + "STRING", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_slash_export_338.csv", + "-o", + "tsfile_cli_slash_second_339.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_slash_export_338.csv", + "type": "file", + "source": "fixtures/recorded/e47f2cf974f4288d.csv" + } + ], + "files": { + "tsfile_cli_slash_second_339.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_slash_second_339.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t", + "-f", + "ndjson", + "tsfile_cli_slash_second_339.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings", + "steps": [ + { + "args": [ + "write", + "--table", + "t", + "--tag", + "site", + "STRING", + "--field", + "message", + "STRING", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_crlf_input_340.csv", + "-o", + "tsfile_cli_crlf_first_341.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_crlf_input_340.csv", + "type": "file", + "source": "fixtures/recorded/4c8de02fcad64c24.csv" + } + ], + "files": { + "tsfile_cli_crlf_first_341.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_crlf_first_341.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t", + "-f", + "ndjson", + "tsfile_cli_crlf_first_341.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t", + "-f", + "csv", + "tsfile_cli_crlf_first_341.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "write", + "--table", + "t", + "--tag", + "site", + "STRING", + "--field", + "message", + "STRING", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_crlf_cat_342.csv", + "-o", + "tsfile_cli_crlf_cat_343.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_crlf_cat_342.csv", + "type": "file", + "source": "fixtures/recorded/dc7368474f850fc0.csv" + } + ], + "files": { + "tsfile_cli_crlf_cat_343.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_crlf_cat_343.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t", + "-f", + "ndjson", + "tsfile_cli_crlf_cat_343.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "t", + "--type", + "csv", + "-o", + "tsfile_cli_crlf_export_344.csv", + "tsfile_cli_crlf_first_341.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_crlf_cat_342.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_crlf_cat_343.tsfile", + "type": "absent" + } + ], + "files": { + "tsfile_cli_crlf_export_344.csv": { + "type": "file", + "source": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/004.stdout.txt" + } + } + }, + { + "args": [ + "write", + "--table", + "t", + "--tag", + "site", + "STRING", + "--field", + "message", + "STRING", + "--field", + "note", + "TEXT", + "-i", + "tsfile_cli_crlf_export_344.csv", + "-o", + "tsfile_cli_crlf_export_345.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_crlf_export_345.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_crlf_export_345.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t", + "-f", + "ndjson", + "tsfile_cli_crlf_export_345.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "ComplexTableFixture.ContainsBothTablesAndNullValues", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_complex_table_346.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_ls_csv.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_table_346.tsfile", + "type": "file", + "source": "fixtures/recorded/f70c095c6ba45072.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "ComplexTableFixture.CsvAnswersMatchByteForByte", + "steps": [ + { + "args": [ + "head", + "-t", + "table2", + "-n", + "3", + "-f", + "csv", + "tsfile_cli_complex_table_347.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/ComplexTableFixture.CsvAnswersMatchByteForByte/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_table_347.tsfile", + "type": "file", + "source": "fixtures/recorded/f70c095c6ba45072.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "ComplexTreeFixture.CsvAnswersMatchByteForByte", + "steps": [ + { + "args": [ + "head", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_tree_348.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_csv.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_tree_348.tsfile", + "type": "file", + "source": "fixtures/complex_tree.tsfile" + } + ], + "files": {} + } + ] + }, + { + "id": "WriteCommand.SuccessfulWriteHasExactSilentOutput", + "steps": [ + { + "args": [ + "write", + "--table", + "written", + "--tag", + "id", + "STRING", + "--field", + "value", + "INT64", + "-i", + "tsfile_cli_write_golden.csv", + "-o", + "tsfile_cli_write_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_write_golden.csv", + "type": "file", + "source": "fixtures/recorded/31970968f7fa8f20.csv" + } + ], + "files": { + "tsfile_cli_write_golden.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_write_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/WriteCommand.SuccessfulWriteHasExactSilentOutput/002.roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "IndependentFixtures.EmptyAndCategoryFilesHaveExactOutputs", + "steps": [ + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_category_edge_golden.tsfile", + "type": "file", + "source": "fixtures/recorded/0eef1509ca9d2e9b.tsfile" + }, + { + "path": "tsfile_cli_empty_field_golden.tsfile", + "type": "file", + "source": "fixtures/recorded/21729ccbd4c9217d.tsfile" + }, + { + "path": "tsfile_cli_empty_table_golden.tsfile", + "type": "file", + "source": "fixtures/recorded/acd5b9243a38e4f8.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_ls_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_schema_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_count_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "sensors", + "-f", + "table", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "sensors", + "-f", + "ndjson", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "sensors", + "-f", + "csv", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "table", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "ndjson", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "csv", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_sketch.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "sensors", + "--type", + "table", + "-o", + "tsfile_cli_empty_table_export_table.out", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_empty_table_export_table.out": { + "type": "file", + "source": "golden/empty_table_head_table.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "sensors", + "--type", + "ndjson", + "-o", + "tsfile_cli_empty_table_export_ndjson.out", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_table_export_table.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_empty_table_export_ndjson.out": { + "type": "file", + "source": "golden/empty_tree_stats_ndjson.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "sensors", + "--type", + "csv", + "-o", + "tsfile_cli_empty_table_export_csv.out", + "tsfile_cli_empty_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_table_export_ndjson.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_empty_table_export_csv.out": { + "type": "file", + "source": "golden/empty_table_head_csv.txt" + } + } + }, + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_table_export_csv.out", + "type": "absent" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_ls_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_schema_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_count_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "category_edge", + "-f", + "table", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "category_edge", + "-f", + "ndjson", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "category_edge", + "-f", + "csv", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "category_edge", + "-f", + "table", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "category_edge", + "-f", + "ndjson", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "category_edge", + "-f", + "csv", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/category_edge_sketch.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "category_edge", + "--type", + "table", + "-o", + "tsfile_cli_category_edge_export_table.out", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_category_edge_export_table.out": { + "type": "file", + "source": "golden/category_edge_head_table.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "category_edge", + "--type", + "ndjson", + "-o", + "tsfile_cli_category_edge_export_ndjson.out", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_category_edge_export_table.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_category_edge_export_ndjson.out": { + "type": "file", + "source": "golden/empty_tree_stats_ndjson.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "category_edge", + "--type", + "csv", + "-o", + "tsfile_cli_category_edge_export_csv.out", + "tsfile_cli_category_edge_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_category_edge_export_ndjson.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_category_edge_export_csv.out": { + "type": "file", + "source": "golden/category_edge_head_csv.txt" + } + } + }, + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_category_edge_export_csv.out", + "type": "absent" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_ls_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_schema_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_table_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_stats_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_count_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "sensors", + "-f", + "table", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "sensors", + "-f", + "ndjson", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "sensors", + "-f", + "csv", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "table", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "ndjson", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "csv", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_field_sketch.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "sensors", + "--type", + "table", + "-o", + "tsfile_cli_empty_field_export_table.out", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_empty_field_export_table.out": { + "type": "file", + "source": "golden/empty_field_head_table.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "sensors", + "--type", + "ndjson", + "-o", + "tsfile_cli_empty_field_export_ndjson.out", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_field_export_table.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_empty_field_export_ndjson.out": { + "type": "file", + "source": "golden/empty_field_head_ndjson.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "sensors", + "--type", + "csv", + "-o", + "tsfile_cli_empty_field_export_csv.out", + "tsfile_cli_empty_field_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_field_export_ndjson.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_empty_field_export_csv.out": { + "type": "file", + "source": "golden/empty_field_head_csv.txt" + } + } + } + ] + }, + { + "id": "IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics", + "steps": [ + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_tree_golden.tsfile", + "type": "file", + "source": "fixtures/recorded/462be7cd53efb021.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty_tree_sketch.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "-f", + "csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "-f", + "csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 3, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.empty.d1", + "--type", + "table", + "-o", + "tsfile_cli_empty_tree_export_table", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/023.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.empty.d1", + "--type", + "ndjson", + "-o", + "tsfile_cli_empty_tree_export_ndjson", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/023.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.empty.d1", + "--type", + "csv", + "-o", + "tsfile_cli_empty_tree_export_csv", + "tsfile_cli_empty_tree_golden.tsfile" + ], + "exit_code": 1, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/023.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_tree_golden.tsfile", + "type": "absent" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "missing", + "--type", + "csv", + "-o", + "tsfile_cli_input_error.csv", + "tsfile_cli_missing_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_damaged_input.tsfile", + "type": "file", + "source": "fixtures/recorded/16a7de49cce86c65.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "missing", + "--type", + "csv", + "-o", + "tsfile_cli_input_error.csv", + "tsfile_cli_damaged_input.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_damaged_input.tsfile", + "type": "absent" + }, + { + "path": "tsfile_cli_empty_tree_353.tsfile", + "type": "file", + "source": "fixtures/recorded/321afaf69e20bc17.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "missing", + "--type", + "csv", + "-o", + "tsfile_cli_input_error.csv", + "tsfile_cli_empty_tree_353.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_empty_tree_353.tsfile", + "type": "absent" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "sketch", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "missing", + "--type", + "csv", + "-o", + "tsfile_cli_input_error.csv", + "." + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_fifo_input_354.tsfile", + "type": "fifo" + } + ], + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "head", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "cat", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "sketch", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + }, + { + "args": [ + "export", + "-t", + "missing", + "--type", + "csv", + "-o", + "tsfile_cli_input_error.csv", + "tsfile_cli_fifo_input_354.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt", + "files": {}, + "posix_only": "Requires POSIX special files or raw byte arguments" + } + ] + }, + { + "id": "IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics", + "steps": [ + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_non_pure_355.tsfile", + "type": "file", + "source": "fixtures/recorded/7e91ad7bab6c76d5.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + }, + { + "args": [ + "head", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + }, + { + "args": [ + "cat", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "hybrid_table", + "--type", + "csv", + "-o", + "tsfile_cli_non_pure_export.csv", + "tsfile_cli_non_pure_355.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject", + "steps": [ + { + "args": [ + "export", + "-t", + "sensors_a", + "-t", + "sensors_b", + "--type", + "csv", + "--output-dir", + "tsfile_cli_corrupt_export_dir_357", + "tsfile_cli_multi_table_fixture_356.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_multi_table_fixture_356.tsfile", + "type": "file", + "source": "fixtures/recorded/6814760cd5c03c70.tsfile" + } + ], + "files": { + "tsfile_cli_corrupt_export_dir_357": { + "type": "directory" + }, + "tsfile_cli_corrupt_export_dir_357/0001.csv": { + "type": "file", + "source": "golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0001.csv.txt" + }, + "tsfile_cli_corrupt_export_dir_357/_manifest.json": { + "type": "file", + "source": "golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001._manifest.json.txt" + } + } + }, + { + "args": [ + "cat", + "-t", + "sensors_b", + "-f", + "csv", + "tsfile_cli_multi_table_fixture_356.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001.stderr.txt", + "files": {} + } + ] + }, + { + "id": "IndependentFixtures.NullableTagsHaveExactPredicateResults", + "steps": [ + { + "args": [ + "cat", + "-t", + "t1", + "-m", + "s1", + "--tag-filter", + "id1", + "is-null", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_358.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_nullable_tag_filter_fixture_358.tsfile", + "type": "file", + "source": "fixtures/recorded/8c384af9ff83865c.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-m", + "s1", + "--tag-filter", + "id1", + "not-null", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_358.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/004.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-m", + "s1", + "--tag-filter", + "id1", + "eq", + "", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_358.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-m", + "s1", + "--tag-filter", + "id1", + "eq", + "null", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_358.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-m", + "s1", + "--tag-filter", + "id1", + "neq", + "dev_a", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_358.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/005.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-m", + "s1", + "--tag-filter", + "id1", + "regexp", + "dev", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_358.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/001.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-m", + "s1", + "--tag-filter", + "id1", + "regexp", + "dev_.*", + "-f", + "csv", + "tsfile_cli_nullable_tag_filter_fixture_358.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "INT64", + "-i", + "tsfile_cli_invalid_time.csv", + "-o", + "tsfile_cli_invalid_time.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/002.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_invalid_time.csv", + "type": "file", + "source": "fixtures/recorded/f23d8f69b526430f.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "INT64", + "-i", + "tsfile_cli_out_of_order.csv", + "-o", + "tsfile_cli_out_of_order.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/002.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_invalid_time.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_out_of_order.csv", + "type": "file", + "source": "fixtures/recorded/162d394b288bb12d.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "INT64", + "-i", + "tsfile_cli_undeclared.csv", + "-o", + "tsfile_cli_undeclared.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/002.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_out_of_order.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_undeclared.csv", + "type": "file", + "source": "fixtures/recorded/d97187a52ca24996.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "INT64", + "-i", + "tsfile_cli_missing_column.csv", + "-o", + "tsfile_cli_missing_column.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_undeclared.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_missing_column.csv", + "type": "file", + "source": "fixtures/recorded/b32ffaa9b5e49e11.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "INT64", + "-i", + "tsfile_cli_unclosed_quote.csv", + "-o", + "tsfile_cli_unclosed_quote.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/CliRequirements.WriteRejectsUnterminatedQuotedCsvField/001.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_missing_column.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_unclosed_quote.csv", + "type": "file", + "source": "fixtures/recorded/ebbbc7b819bea734.csv" + } + ], + "files": {} + }, + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "site", + "STRING", + "--field", + "temp", + "INT64", + "-i", + "tsfile_cli_comment.csv", + "-o", + "tsfile_cli_comment.tsfile" + ], + "exit_code": 2, + "stdout": "golden/empty.txt", + "stderr": "golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/006.stderr.txt", + "prepare": [ + { + "path": "tsfile_cli_unclosed_quote.csv", + "type": "absent" + }, + { + "path": "tsfile_cli_comment.csv", + "type": "file", + "source": "fixtures/recorded/74123c6ba2cf9a64.csv" + } + ], + "files": {} + } + ] + }, + { + "id": "IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes", + "steps": [ + { + "args": [ + "cat", + "-t", + "t1", + "-f", + "table", + "tsfile_cli_control_char_359.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/001.stdout.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_control_char_359.tsfile", + "type": "file", + "source": "fixtures/recorded/ff981d1dcd989b10.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-f", + "csv", + "tsfile_cli_control_char_359.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/002.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "t1", + "-f", + "ndjson", + "tsfile_cli_control_char_359.tsfile" + ], + "exit_code": 0, + "stdout": "golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/003.stdout.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "TreeAndTable__BothModels.MetadataCommandsImplementAllPublicFormats__Tree", + "steps": [ + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_tree_golden.tsfile", + "type": "file", + "source": "fixtures/complex_tree.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_ls_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_schema_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_stats_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_count_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "TreeAndTable__BothModels.MetadataCommandsImplementAllPublicFormats__Table", + "steps": [ + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_table_golden.tsfile", + "type": "file", + "source": "fixtures/complex_table.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_ls_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_schema_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_stats_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_count_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "TreeAndTable__BothModels.RowCommandsPreserveRowsAcrossFormats__Tree", + "steps": [ + { + "args": [ + "head", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_tree_golden.tsfile", + "type": "file", + "source": "fixtures/complex_tree.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "TreeAndTable__BothModels.RowCommandsPreserveRowsAcrossFormats__Table", + "steps": [ + { + "args": [ + "head", + "-t", + "table2", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_table_golden.tsfile", + "type": "file", + "source": "fixtures/complex_table.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "head", + "-t", + "table2", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "table2", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "table2", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "table2", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "table2", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + }, + { + "id": "TreeAndTable__BothModels.SketchAndExportSupportBothModelKinds__Tree", + "steps": [ + { + "args": [ + "sketch", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_sketch.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_tree_golden.tsfile", + "type": "file", + "source": "fixtures/complex_tree.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.test.d1", + "--type", + "csv", + "-o", + "tsfile_cli_model_export_365.csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_model_export_365.csv": { + "type": "file", + "source": "golden/tree_export_csv.txt" + } + } + } + ] + }, + { + "id": "TreeAndTable__BothModels.SketchAndExportSupportBothModelKinds__Table", + "steps": [ + { + "args": [ + "sketch", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_sketch.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_table_golden.tsfile", + "type": "file", + "source": "fixtures/complex_table.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "export", + "-t", + "table2", + "--type", + "csv", + "-o", + "tsfile_cli_model_export_367.csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_model_export_367.csv": { + "type": "file", + "source": "golden/table_export_csv.txt" + } + } + } + ] + }, + { + "id": "TreeAndTable__BothModels.EverySuccessfulCommandHasExactGoldenOutput__Tree", + "steps": [ + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_tree_golden.tsfile", + "type": "file", + "source": "fixtures/complex_tree.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_ls_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_schema_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_stats_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_count_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-d", + "root.test.d1", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/tree_sketch.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "export", + "-d", + "root.test.d1", + "--type", + "table", + "-o", + "tsfile_cli_export_golden_tree_table_369.out", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_export_golden_tree_table_369.out": { + "type": "file", + "source": "golden/tree_export_table.txt" + } + } + }, + { + "args": [ + "export", + "-d", + "root.test.d1", + "--type", + "ndjson", + "-o", + "tsfile_cli_export_golden_tree_ndjson_370.out", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_export_golden_tree_table_369.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_export_golden_tree_ndjson_370.out": { + "type": "file", + "source": "golden/tree_export_ndjson.txt" + } + } + }, + { + "args": [ + "export", + "-d", + "root.test.d1", + "--type", + "csv", + "-o", + "tsfile_cli_export_golden_tree_csv_371.out", + "tsfile_cli_complex_tree_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_export_golden_tree_ndjson_370.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_export_golden_tree_csv_371.out": { + "type": "file", + "source": "golden/tree_export_csv.txt" + } + } + } + ] + }, + { + "id": "TreeAndTable__BothModels.EverySuccessfulCommandHasExactGoldenOutput__Table", + "steps": [ + { + "args": [ + "ls", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_ls_table.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_complex_table_golden.tsfile", + "type": "file", + "source": "fixtures/complex_table.tsfile" + } + ], + "files": {} + }, + { + "args": [ + "ls", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_ls_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "ls", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_ls_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_schema_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_schema_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "schema", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_schema_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_meta_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_meta_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "meta", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_meta_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_stats_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_stats_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "stats", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_stats_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_count_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_count_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "count", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_count_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "table2", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "table2", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "head", + "-t", + "table2", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "table2", + "-n", + "2", + "-f", + "table", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_table.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "table2", + "-n", + "2", + "-f", + "ndjson", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_ndjson.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "cat", + "-t", + "table2", + "-n", + "2", + "-f", + "csv", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_head_csv.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "sketch", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/table_sketch.txt", + "stderr": "golden/empty.txt", + "files": {} + }, + { + "args": [ + "export", + "-t", + "table2", + "--type", + "table", + "-o", + "tsfile_cli_export_golden_table_table_373.out", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "tsfile_cli_export_golden_table_table_373.out": { + "type": "file", + "source": "golden/table_export_table.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "table2", + "--type", + "ndjson", + "-o", + "tsfile_cli_export_golden_table_ndjson_374.out", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_export_golden_table_table_373.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_export_golden_table_ndjson_374.out": { + "type": "file", + "source": "golden/table_export_ndjson.txt" + } + } + }, + { + "args": [ + "export", + "-t", + "table2", + "--type", + "csv", + "-o", + "tsfile_cli_export_golden_table_csv_375.out", + "tsfile_cli_complex_table_golden.tsfile" + ], + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "prepare": [ + { + "path": "tsfile_cli_export_golden_table_ndjson_374.out", + "type": "absent" + } + ], + "files": { + "tsfile_cli_export_golden_table_csv_375.out": { + "type": "file", + "source": "golden/table_export_csv.txt" + } + } + } + ] + }, + { + "id": "CliE2E.StdinWriteRoundTrip", + "steps": [ + { + "args": [ + "write", + "--table", + "sensors", + "--tag", + "id", + "STRING", + "--field", + "value", + "INT64", + "--stdin", + "-o", + "stdin.tsfile" + ], + "stdin": "fixtures/stdin.csv", + "exit_code": 0, + "stdout": "golden/empty.txt", + "stderr": "golden/empty.txt", + "files": { + "stdin.tsfile": { + "type": "file" + } + } + }, + { + "args": [ + "cat", + "-t", + "sensors", + "-f", + "csv", + "stdin.tsfile" + ], + "exit_code": 0, + "stdout": "golden/stdin_roundtrip.txt", + "stderr": "golden/empty.txt", + "files": {} + } + ] + } + ] +} diff --git a/cpp/test/tools/fixtures/complex_table.tsfile b/cpp/test/tools/e2e/fixtures/complex_table.tsfile similarity index 100% rename from cpp/test/tools/fixtures/complex_table.tsfile rename to cpp/test/tools/e2e/fixtures/complex_table.tsfile diff --git a/cpp/test/tools/fixtures/complex_tree.tsfile b/cpp/test/tools/e2e/fixtures/complex_tree.tsfile similarity index 100% rename from cpp/test/tools/fixtures/complex_tree.tsfile rename to cpp/test/tools/e2e/fixtures/complex_tree.tsfile diff --git a/cpp/test/tools/e2e/fixtures/recorded/001a55cd3aa30703.csv b/cpp/test/tools/e2e/fixtures/recorded/001a55cd3aa30703.csv new file mode 100644 index 000000000..4cf456195 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/001a55cd3aa30703.csv @@ -0,0 +1,1102 @@ +time,s1 +1,1 +2,2 +3,3 +4,4 +5,5 +6,6 +7,7 +8,8 +9,9 +10,10 +11,11 +12,12 +13,13 +14,14 +15,15 +16,16 +17,17 +18,18 +19,19 +20,20 +21,21 +22,22 +23,23 +24,24 +25,25 +26,26 +27,27 +28,28 +29,29 +30,30 +31,31 +32,32 +33,33 +34,34 +35,35 +36,36 +37,37 +38,38 +39,39 +40,40 +41,41 +42,42 +43,43 +44,44 +45,45 +46,46 +47,47 +48,48 +49,49 +50,50 +51,51 +52,52 +53,53 +54,54 +55,55 +56,56 +57,57 +58,58 +59,59 +60,60 +61,61 +62,62 +63,63 +64,64 +65,65 +66,66 +67,67 +68,68 +69,69 +70,70 +71,71 +72,72 +73,73 +74,74 +75,75 +76,76 +77,77 +78,78 +79,79 +80,80 +81,81 +82,82 +83,83 +84,84 +85,85 +86,86 +87,87 +88,88 +89,89 +90,90 +91,91 +92,92 +93,93 +94,94 +95,95 +96,96 +97,97 +98,98 +99,99 +100,100 +101,101 +102,102 +103,103 +104,104 +105,105 +106,106 +107,107 +108,108 +109,109 +110,110 +111,111 +112,112 +113,113 +114,114 +115,115 +116,116 +117,117 +118,118 +119,119 +120,120 +121,121 +122,122 +123,123 +124,124 +125,125 +126,126 +127,127 +128,128 +129,129 +130,130 +131,131 +132,132 +133,133 +134,134 +135,135 +136,136 +137,137 +138,138 +139,139 +140,140 +141,141 +142,142 +143,143 +144,144 +145,145 +146,146 +147,147 +148,148 +149,149 +150,150 +151,151 +152,152 +153,153 +154,154 +155,155 +156,156 +157,157 +158,158 +159,159 +160,160 +161,161 +162,162 +163,163 +164,164 +165,165 +166,166 +167,167 +168,168 +169,169 +170,170 +171,171 +172,172 +173,173 +174,174 +175,175 +176,176 +177,177 +178,178 +179,179 +180,180 +181,181 +182,182 +183,183 +184,184 +185,185 +186,186 +187,187 +188,188 +189,189 +190,190 +191,191 +192,192 +193,193 +194,194 +195,195 +196,196 +197,197 +198,198 +199,199 +200,200 +201,201 +202,202 +203,203 +204,204 +205,205 +206,206 +207,207 +208,208 +209,209 +210,210 +211,211 +212,212 +213,213 +214,214 +215,215 +216,216 +217,217 +218,218 +219,219 +220,220 +221,221 +222,222 +223,223 +224,224 +225,225 +226,226 +227,227 +228,228 +229,229 +230,230 +231,231 +232,232 +233,233 +234,234 +235,235 +236,236 +237,237 +238,238 +239,239 +240,240 +241,241 +242,242 +243,243 +244,244 +245,245 +246,246 +247,247 +248,248 +249,249 +250,250 +251,251 +252,252 +253,253 +254,254 +255,255 +256,256 +257,257 +258,258 +259,259 +260,260 +261,261 +262,262 +263,263 +264,264 +265,265 +266,266 +267,267 +268,268 +269,269 +270,270 +271,271 +272,272 +273,273 +274,274 +275,275 +276,276 +277,277 +278,278 +279,279 +280,280 +281,281 +282,282 +283,283 +284,284 +285,285 +286,286 +287,287 +288,288 +289,289 +290,290 +291,291 +292,292 +293,293 +294,294 +295,295 +296,296 +297,297 +298,298 +299,299 +300,300 +301,301 +302,302 +303,303 +304,304 +305,305 +306,306 +307,307 +308,308 +309,309 +310,310 +311,311 +312,312 +313,313 +314,314 +315,315 +316,316 +317,317 +318,318 +319,319 +320,320 +321,321 +322,322 +323,323 +324,324 +325,325 +326,326 +327,327 +328,328 +329,329 +330,330 +331,331 +332,332 +333,333 +334,334 +335,335 +336,336 +337,337 +338,338 +339,339 +340,340 +341,341 +342,342 +343,343 +344,344 +345,345 +346,346 +347,347 +348,348 +349,349 +350,350 +351,351 +352,352 +353,353 +354,354 +355,355 +356,356 +357,357 +358,358 +359,359 +360,360 +361,361 +362,362 +363,363 +364,364 +365,365 +366,366 +367,367 +368,368 +369,369 +370,370 +371,371 +372,372 +373,373 +374,374 +375,375 +376,376 +377,377 +378,378 +379,379 +380,380 +381,381 +382,382 +383,383 +384,384 +385,385 +386,386 +387,387 +388,388 +389,389 +390,390 +391,391 +392,392 +393,393 +394,394 +395,395 +396,396 +397,397 +398,398 +399,399 +400,400 +401,401 +402,402 +403,403 +404,404 +405,405 +406,406 +407,407 +408,408 +409,409 +410,410 +411,411 +412,412 +413,413 +414,414 +415,415 +416,416 +417,417 +418,418 +419,419 +420,420 +421,421 +422,422 +423,423 +424,424 +425,425 +426,426 +427,427 +428,428 +429,429 +430,430 +431,431 +432,432 +433,433 +434,434 +435,435 +436,436 +437,437 +438,438 +439,439 +440,440 +441,441 +442,442 +443,443 +444,444 +445,445 +446,446 +447,447 +448,448 +449,449 +450,450 +451,451 +452,452 +453,453 +454,454 +455,455 +456,456 +457,457 +458,458 +459,459 +460,460 +461,461 +462,462 +463,463 +464,464 +465,465 +466,466 +467,467 +468,468 +469,469 +470,470 +471,471 +472,472 +473,473 +474,474 +475,475 +476,476 +477,477 +478,478 +479,479 +480,480 +481,481 +482,482 +483,483 +484,484 +485,485 +486,486 +487,487 +488,488 +489,489 +490,490 +491,491 +492,492 +493,493 +494,494 +495,495 +496,496 +497,497 +498,498 +499,499 +500,500 +501,501 +502,502 +503,503 +504,504 +505,505 +506,506 +507,507 +508,508 +509,509 +510,510 +511,511 +512,512 +513,513 +514,514 +515,515 +516,516 +517,517 +518,518 +519,519 +520,520 +521,521 +522,522 +523,523 +524,524 +525,525 +526,526 +527,527 +528,528 +529,529 +530,530 +531,531 +532,532 +533,533 +534,534 +535,535 +536,536 +537,537 +538,538 +539,539 +540,540 +541,541 +542,542 +543,543 +544,544 +545,545 +546,546 +547,547 +548,548 +549,549 +550,550 +551,551 +552,552 +553,553 +554,554 +555,555 +556,556 +557,557 +558,558 +559,559 +560,560 +561,561 +562,562 +563,563 +564,564 +565,565 +566,566 +567,567 +568,568 +569,569 +570,570 +571,571 +572,572 +573,573 +574,574 +575,575 +576,576 +577,577 +578,578 +579,579 +580,580 +581,581 +582,582 +583,583 +584,584 +585,585 +586,586 +587,587 +588,588 +589,589 +590,590 +591,591 +592,592 +593,593 +594,594 +595,595 +596,596 +597,597 +598,598 +599,599 +600,600 +601,601 +602,602 +603,603 +604,604 +605,605 +606,606 +607,607 +608,608 +609,609 +610,610 +611,611 +612,612 +613,613 +614,614 +615,615 +616,616 +617,617 +618,618 +619,619 +620,620 +621,621 +622,622 +623,623 +624,624 +625,625 +626,626 +627,627 +628,628 +629,629 +630,630 +631,631 +632,632 +633,633 +634,634 +635,635 +636,636 +637,637 +638,638 +639,639 +640,640 +641,641 +642,642 +643,643 +644,644 +645,645 +646,646 +647,647 +648,648 +649,649 +650,650 +651,651 +652,652 +653,653 +654,654 +655,655 +656,656 +657,657 +658,658 +659,659 +660,660 +661,661 +662,662 +663,663 +664,664 +665,665 +666,666 +667,667 +668,668 +669,669 +670,670 +671,671 +672,672 +673,673 +674,674 +675,675 +676,676 +677,677 +678,678 +679,679 +680,680 +681,681 +682,682 +683,683 +684,684 +685,685 +686,686 +687,687 +688,688 +689,689 +690,690 +691,691 +692,692 +693,693 +694,694 +695,695 +696,696 +697,697 +698,698 +699,699 +700,700 +701,701 +702,702 +703,703 +704,704 +705,705 +706,706 +707,707 +708,708 +709,709 +710,710 +711,711 +712,712 +713,713 +714,714 +715,715 +716,716 +717,717 +718,718 +719,719 +720,720 +721,721 +722,722 +723,723 +724,724 +725,725 +726,726 +727,727 +728,728 +729,729 +730,730 +731,731 +732,732 +733,733 +734,734 +735,735 +736,736 +737,737 +738,738 +739,739 +740,740 +741,741 +742,742 +743,743 +744,744 +745,745 +746,746 +747,747 +748,748 +749,749 +750,750 +751,751 +752,752 +753,753 +754,754 +755,755 +756,756 +757,757 +758,758 +759,759 +760,760 +761,761 +762,762 +763,763 +764,764 +765,765 +766,766 +767,767 +768,768 +769,769 +770,770 +771,771 +772,772 +773,773 +774,774 +775,775 +776,776 +777,777 +778,778 +779,779 +780,780 +781,781 +782,782 +783,783 +784,784 +785,785 +786,786 +787,787 +788,788 +789,789 +790,790 +791,791 +792,792 +793,793 +794,794 +795,795 +796,796 +797,797 +798,798 +799,799 +800,800 +801,801 +802,802 +803,803 +804,804 +805,805 +806,806 +807,807 +808,808 +809,809 +810,810 +811,811 +812,812 +813,813 +814,814 +815,815 +816,816 +817,817 +818,818 +819,819 +820,820 +821,821 +822,822 +823,823 +824,824 +825,825 +826,826 +827,827 +828,828 +829,829 +830,830 +831,831 +832,832 +833,833 +834,834 +835,835 +836,836 +837,837 +838,838 +839,839 +840,840 +841,841 +842,842 +843,843 +844,844 +845,845 +846,846 +847,847 +848,848 +849,849 +850,850 +851,851 +852,852 +853,853 +854,854 +855,855 +856,856 +857,857 +858,858 +859,859 +860,860 +861,861 +862,862 +863,863 +864,864 +865,865 +866,866 +867,867 +868,868 +869,869 +870,870 +871,871 +872,872 +873,873 +874,874 +875,875 +876,876 +877,877 +878,878 +879,879 +880,880 +881,881 +882,882 +883,883 +884,884 +885,885 +886,886 +887,887 +888,888 +889,889 +890,890 +891,891 +892,892 +893,893 +894,894 +895,895 +896,896 +897,897 +898,898 +899,899 +900,900 +901,901 +902,902 +903,903 +904,904 +905,905 +906,906 +907,907 +908,908 +909,909 +910,910 +911,911 +912,912 +913,913 +914,914 +915,915 +916,916 +917,917 +918,918 +919,919 +920,920 +921,921 +922,922 +923,923 +924,924 +925,925 +926,926 +927,927 +928,928 +929,929 +930,930 +931,931 +932,932 +933,933 +934,934 +935,935 +936,936 +937,937 +938,938 +939,939 +940,940 +941,941 +942,942 +943,943 +944,944 +945,945 +946,946 +947,947 +948,948 +949,949 +950,950 +951,951 +952,952 +953,953 +954,954 +955,955 +956,956 +957,957 +958,958 +959,959 +960,960 +961,961 +962,962 +963,963 +964,964 +965,965 +966,966 +967,967 +968,968 +969,969 +970,970 +971,971 +972,972 +973,973 +974,974 +975,975 +976,976 +977,977 +978,978 +979,979 +980,980 +981,981 +982,982 +983,983 +984,984 +985,985 +986,986 +987,987 +988,988 +989,989 +990,990 +991,991 +992,992 +993,993 +994,994 +995,995 +996,996 +997,997 +998,998 +999,999 +1000,1000 +1001,1001 +1002,1002 +1003,1003 +1004,1004 +1005,1005 +1006,1006 +1007,1007 +1008,1008 +1009,1009 +1010,1010 +1011,1011 +1012,1012 +1013,1013 +1014,1014 +1015,1015 +1016,1016 +1017,1017 +1018,1018 +1019,1019 +1020,1020 +1021,1021 +1022,1022 +1023,1023 +1024,1024 +1025,1025 +1026,1026 +1027,1027 +1028,1028 +1029,1029 +1030,1030 +1031,1031 +1032,1032 +1033,1033 +1034,1034 +1035,1035 +1036,1036 +1037,1037 +1038,1038 +1039,1039 +1040,1040 +1041,1041 +1042,1042 +1043,1043 +1044,1044 +1045,1045 +1046,1046 +1047,1047 +1048,1048 +1049,1049 +1050,1050 +1051,1051 +1052,1052 +1053,1053 +1054,1054 +1055,1055 +1056,1056 +1057,1057 +1058,1058 +1059,1059 +1060,1060 +1061,1061 +1062,1062 +1063,1063 +1064,1064 +1065,1065 +1066,1066 +1067,1067 +1068,1068 +1069,1069 +1070,1070 +1071,1071 +1072,1072 +1073,1073 +1074,1074 +1075,1075 +1076,1076 +1077,1077 +1078,1078 +1079,1079 +1080,1080 +1081,1081 +1082,1082 +1083,1083 +1084,1084 +1085,1085 +1086,1086 +1087,1087 +1088,1088 +1089,1089 +1090,1090 +1091,1091 +1092,1092 +1093,1093 +1094,1094 +1095,1095 +1096,1096 +1097,1097 +1098,1098 +1099,1099 +1100,1100 +500,999 diff --git a/cpp/test/tools/e2e/fixtures/recorded/02e7ee891c98c640.tsfile b/cpp/test/tools/e2e/fixtures/recorded/02e7ee891c98c640.tsfile new file mode 100644 index 000000000..b117298db Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/02e7ee891c98c640.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/04fb4d7ce9cd9f35.csv b/cpp/test/tools/e2e/fixtures/recorded/04fb4d7ce9cd9f35.csv new file mode 100644 index 000000000..805922aff --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/04fb4d7ce9cd9f35.csv @@ -0,0 +1,2 @@ +time,s1 +0,12abc diff --git a/cpp/test/tools/e2e/fixtures/recorded/0a285e57e7770abd.csv b/cpp/test/tools/e2e/fixtures/recorded/0a285e57e7770abd.csv new file mode 100644 index 000000000..42d2628fa --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/0a285e57e7770abd.csv @@ -0,0 +1,2 @@ +time,a_bool,b_int,c_long,d_float,e_double,f_str,g_ts,h_date +10,true,42,9000000000,1.5,3.25,hello,1700000000000,2024-06-15 diff --git a/cpp/test/tools/e2e/fixtures/recorded/0eef1509ca9d2e9b.tsfile b/cpp/test/tools/e2e/fixtures/recorded/0eef1509ca9d2e9b.tsfile new file mode 100644 index 000000000..5b7d744df Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/0eef1509ca9d2e9b.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/0fbee3b1c70b3081.csv b/cpp/test/tools/e2e/fixtures/recorded/0fbee3b1c70b3081.csv new file mode 100644 index 000000000..3bf8b740e --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/0fbee3b1c70b3081.csv @@ -0,0 +1,2 @@ +time,s1 ++1,10 diff --git a/cpp/test/tools/e2e/fixtures/recorded/0fe32771aae23654.tsfile b/cpp/test/tools/e2e/fixtures/recorded/0fe32771aae23654.tsfile new file mode 100644 index 000000000..420a52c4f Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/0fe32771aae23654.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/11b77be68feb2859.out b/cpp/test/tools/e2e/fixtures/recorded/11b77be68feb2859.out new file mode 100644 index 000000000..dcd3cf518 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/11b77be68feb2859.out @@ -0,0 +1 @@ +keep existing output diff --git a/cpp/test/tools/e2e/fixtures/recorded/162d394b288bb12d.csv b/cpp/test/tools/e2e/fixtures/recorded/162d394b288bb12d.csv new file mode 100644 index 000000000..1d5259049 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/162d394b288bb12d.csv @@ -0,0 +1,3 @@ +time,site,temp +2000,dev,1 +1000,dev,2 diff --git a/cpp/test/tools/e2e/fixtures/recorded/1692892e6fa59720.csv b/cpp/test/tools/e2e/fixtures/recorded/1692892e6fa59720.csv new file mode 100644 index 000000000..396424a37 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/1692892e6fa59720.csv @@ -0,0 +1,2 @@ +time,site,temp,status +1000,beijing,21.5,true diff --git a/cpp/test/tools/e2e/fixtures/recorded/16a7de49cce86c65.tsfile b/cpp/test/tools/e2e/fixtures/recorded/16a7de49cce86c65.tsfile new file mode 100644 index 000000000..be88f4e1c --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/16a7de49cce86c65.tsfile @@ -0,0 +1 @@ +not a TsFile \ No newline at end of file diff --git a/cpp/test/tools/e2e/fixtures/recorded/19010534e83117ea.tsfile b/cpp/test/tools/e2e/fixtures/recorded/19010534e83117ea.tsfile new file mode 100644 index 000000000..8b7379318 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/19010534e83117ea.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/1b1a5cfd0890f477.tsfile b/cpp/test/tools/e2e/fixtures/recorded/1b1a5cfd0890f477.tsfile new file mode 100644 index 000000000..b624e480b Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/1b1a5cfd0890f477.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/21040fc546353838.csv b/cpp/test/tools/e2e/fixtures/recorded/21040fc546353838.csv new file mode 100644 index 000000000..1480377fe --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/21040fc546353838.csv @@ -0,0 +1,2 @@ +time,s1 +0,99999999999999999999999999 diff --git a/cpp/test/tools/e2e/fixtures/recorded/21729ccbd4c9217d.tsfile b/cpp/test/tools/e2e/fixtures/recorded/21729ccbd4c9217d.tsfile new file mode 100644 index 000000000..37015a90e Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/21729ccbd4c9217d.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/25bf81a100c6d89c.tsfile b/cpp/test/tools/e2e/fixtures/recorded/25bf81a100c6d89c.tsfile new file mode 100644 index 000000000..f52e61249 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/25bf81a100c6d89c.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/280cb420cebd39d7.csv b/cpp/test/tools/e2e/fixtures/recorded/280cb420cebd39d7.csv new file mode 100644 index 000000000..047b719da --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/280cb420cebd39d7.csv @@ -0,0 +1,2 @@ +time,s1 +0,2024-02-30 diff --git a/cpp/test/tools/e2e/fixtures/recorded/2b7847b7b705781d.txt b/cpp/test/tools/e2e/fixtures/recorded/2b7847b7b705781d.txt new file mode 100644 index 000000000..18a3f7e85 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/2b7847b7b705781d.txt @@ -0,0 +1 @@ +sentinel \ No newline at end of file diff --git a/cpp/test/tools/e2e/fixtures/recorded/2ed856c16e47ccba.tsfile b/cpp/test/tools/e2e/fixtures/recorded/2ed856c16e47ccba.tsfile new file mode 100644 index 000000000..afa7918c6 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/2ed856c16e47ccba.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/3098941db5f6f150.tsfile b/cpp/test/tools/e2e/fixtures/recorded/3098941db5f6f150.tsfile new file mode 100644 index 000000000..fca4a8bce Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/3098941db5f6f150.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/30eb087a88f388c1.csv b/cpp/test/tools/e2e/fixtures/recorded/30eb087a88f388c1.csv new file mode 100644 index 000000000..97cfff97d --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/30eb087a88f388c1.csv @@ -0,0 +1,3 @@ +time,site,temp,humidity +1000,beijing,21.0,40.5 +2000,beijing,21.5,41.0 diff --git a/cpp/test/tools/e2e/fixtures/recorded/31970968f7fa8f20.csv b/cpp/test/tools/e2e/fixtures/recorded/31970968f7fa8f20.csv new file mode 100644 index 000000000..40e8ab954 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/31970968f7fa8f20.csv @@ -0,0 +1,3 @@ +time,id,value +0,dev,10 +1,dev,20 diff --git a/cpp/test/tools/e2e/fixtures/recorded/321afaf69e20bc17.tsfile b/cpp/test/tools/e2e/fixtures/recorded/321afaf69e20bc17.tsfile new file mode 100644 index 000000000..6d5678df8 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/321afaf69e20bc17.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/32bf457d65422f93.csv b/cpp/test/tools/e2e/fixtures/recorded/32bf457d65422f93.csv new file mode 100644 index 000000000..2382908a0 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/32bf457d65422f93.csv @@ -0,0 +1,4 @@ +time,id1,note +0,dev,"line one +line two" +1,dev,plain diff --git a/cpp/test/tools/e2e/fixtures/recorded/32df682cd666de13.csv b/cpp/test/tools/e2e/fixtures/recorded/32df682cd666de13.csv new file mode 100644 index 000000000..3e4a9d922 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/32df682cd666de13.csv @@ -0,0 +1,2 @@ +time,site,temp,TEMP +1000,beijing,21.5,22.0 diff --git a/cpp/test/tools/e2e/fixtures/recorded/3497e1b9bed50133.csv b/cpp/test/tools/e2e/fixtures/recorded/3497e1b9bed50133.csv new file mode 100644 index 000000000..8a49f6990 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/3497e1b9bed50133.csv @@ -0,0 +1,3 @@ +time,site,temp +1000,\N,21.0 +1000,"",22.0 diff --git a/cpp/test/tools/e2e/fixtures/recorded/3681eaaa9dd04162.csv b/cpp/test/tools/e2e/fixtures/recorded/3681eaaa9dd04162.csv new file mode 100644 index 000000000..0178c2c5c --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/3681eaaa9dd04162.csv @@ -0,0 +1,3 @@ +time,id1,f1,d1 +0,dev,0.1,0.1 +1,dev,3.4028235,3.141592653589793 diff --git a/cpp/test/tools/e2e/fixtures/recorded/38d1a142bdf82d96.csv b/cpp/test/tools/e2e/fixtures/recorded/38d1a142bdf82d96.csv new file mode 100644 index 000000000..97af12414 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/38d1a142bdf82d96.csv @@ -0,0 +1,2 @@ +time,s1 +-0,10 diff --git a/cpp/test/tools/e2e/fixtures/recorded/3a22c3d57d16053e.csv b/cpp/test/tools/e2e/fixtures/recorded/3a22c3d57d16053e.csv new file mode 100644 index 000000000..b34db37a7 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/3a22c3d57d16053e.csv @@ -0,0 +1,2 @@ +time,wrong +0,1 diff --git a/cpp/test/tools/e2e/fixtures/recorded/3f705604910a155c.tsfile b/cpp/test/tools/e2e/fixtures/recorded/3f705604910a155c.tsfile new file mode 100644 index 000000000..5687cc8c1 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/3f705604910a155c.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/3f73b03698921151.csv b/cpp/test/tools/e2e/fixtures/recorded/3f73b03698921151.csv new file mode 100644 index 000000000..44b40077e --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/3f73b03698921151.csv @@ -0,0 +1,2 @@ +time,s1 +0,10 diff --git a/cpp/test/tools/e2e/fixtures/recorded/4437ed311b6ffac5.csv b/cpp/test/tools/e2e/fixtures/recorded/4437ed311b6ffac5.csv new file mode 100644 index 000000000..f16dbdf9f --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/4437ed311b6ffac5.csv @@ -0,0 +1,2 @@ +time,s1 +0,not-a-date diff --git a/cpp/test/tools/e2e/fixtures/recorded/443d44fab5249879.csv b/cpp/test/tools/e2e/fixtures/recorded/443d44fab5249879.csv new file mode 100644 index 000000000..bea761b8a --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/443d44fab5249879.csv @@ -0,0 +1,2 @@ +time,s1 +0,3000000000 diff --git a/cpp/test/tools/e2e/fixtures/recorded/462be7cd53efb021.tsfile b/cpp/test/tools/e2e/fixtures/recorded/462be7cd53efb021.tsfile new file mode 100644 index 000000000..13918da3f Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/462be7cd53efb021.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/4c8de02fcad64c24.csv b/cpp/test/tools/e2e/fixtures/recorded/4c8de02fcad64c24.csv new file mode 100644 index 000000000..0911d4f8f --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/4c8de02fcad64c24.csv @@ -0,0 +1,17 @@ +time,site,message,note +0,"s +1","first +second","""quoted"" + +last" +1,"s +1","lf +only","mixed +and +more" +2,"s +1","carriage return"," +" +3,"s +1","ends ","line +end" \ No newline at end of file diff --git a/cpp/test/tools/e2e/fixtures/recorded/50568f65241e50ce.csv b/cpp/test/tools/e2e/fixtures/recorded/50568f65241e50ce.csv new file mode 100644 index 000000000..8e8a1d490 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/50568f65241e50ce.csv @@ -0,0 +1,2 @@ +time,s1 +0,Ã( diff --git a/cpp/test/tools/e2e/fixtures/recorded/5077671e7b6996b9.tsfile b/cpp/test/tools/e2e/fixtures/recorded/5077671e7b6996b9.tsfile new file mode 100644 index 000000000..461d892a1 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/5077671e7b6996b9.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/59b2d6c45e72adb4.csv b/cpp/test/tools/e2e/fixtures/recorded/59b2d6c45e72adb4.csv new file mode 100644 index 000000000..a1c21567c --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/59b2d6c45e72adb4.csv @@ -0,0 +1,2 @@ +time,s1 +0,1 diff --git a/cpp/test/tools/e2e/fixtures/recorded/5a1ae43282c6e8d5.tsfile b/cpp/test/tools/e2e/fixtures/recorded/5a1ae43282c6e8d5.tsfile new file mode 100644 index 000000000..01f34ec12 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/5a1ae43282c6e8d5.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/5d51538ae37766cf.tsfile b/cpp/test/tools/e2e/fixtures/recorded/5d51538ae37766cf.tsfile new file mode 100644 index 000000000..b1c2ee251 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/5d51538ae37766cf.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/5fbbb88cc56b243a.csv b/cpp/test/tools/e2e/fixtures/recorded/5fbbb88cc56b243a.csv new file mode 100644 index 000000000..64374dabc --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/5fbbb88cc56b243a.csv @@ -0,0 +1,2 @@ +time,site,temp +1000,"beijing,21.0 diff --git a/cpp/test/tools/e2e/fixtures/recorded/627d54d74200f724.tsfile b/cpp/test/tools/e2e/fixtures/recorded/627d54d74200f724.tsfile new file mode 100644 index 000000000..acf421a49 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/627d54d74200f724.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/65f89edd125782e8.tsfile b/cpp/test/tools/e2e/fixtures/recorded/65f89edd125782e8.tsfile new file mode 100644 index 000000000..8c6f7892e Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/65f89edd125782e8.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/6814760cd5c03c70.tsfile b/cpp/test/tools/e2e/fixtures/recorded/6814760cd5c03c70.tsfile new file mode 100644 index 000000000..3ae71415e Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/6814760cd5c03c70.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/6e073691a8e066e5.csv b/cpp/test/tools/e2e/fixtures/recorded/6e073691a8e066e5.csv new file mode 100644 index 000000000..2237f4505 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/6e073691a8e066e5.csv @@ -0,0 +1,2 @@ +time,s1 +0,2024-02-29 diff --git a/cpp/test/tools/e2e/fixtures/recorded/6e07eb49b34dc35a.tsfile b/cpp/test/tools/e2e/fixtures/recorded/6e07eb49b34dc35a.tsfile new file mode 100644 index 000000000..0c8e1ab7d Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/6e07eb49b34dc35a.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/74123c6ba2cf9a64.csv b/cpp/test/tools/e2e/fixtures/recorded/74123c6ba2cf9a64.csv new file mode 100644 index 000000000..5b2d0295e --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/74123c6ba2cf9a64.csv @@ -0,0 +1,2 @@ +time,site,temp +# comment diff --git a/cpp/test/tools/e2e/fixtures/recorded/77d5cdbf284147c1.csv b/cpp/test/tools/e2e/fixtures/recorded/77d5cdbf284147c1.csv new file mode 100644 index 000000000..0c31580b3 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/77d5cdbf284147c1.csv @@ -0,0 +1,2 @@ +time,s1 +0,not-a-number diff --git a/cpp/test/tools/e2e/fixtures/recorded/7a5d81e3af50bc9a.csv b/cpp/test/tools/e2e/fixtures/recorded/7a5d81e3af50bc9a.csv new file mode 100644 index 000000000..c6805dffb --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/7a5d81e3af50bc9a.csv @@ -0,0 +1,2 @@ +time,site +1000,beijing diff --git a/cpp/test/tools/e2e/fixtures/recorded/7c94f08bcfc8bf1f.csv b/cpp/test/tools/e2e/fixtures/recorded/7c94f08bcfc8bf1f.csv new file mode 100644 index 000000000..43d5787ef --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/7c94f08bcfc8bf1f.csv @@ -0,0 +1,2 @@ +time,s1 +01,10 diff --git a/cpp/test/tools/e2e/fixtures/recorded/7e91ad7bab6c76d5.tsfile b/cpp/test/tools/e2e/fixtures/recorded/7e91ad7bab6c76d5.tsfile new file mode 100644 index 000000000..47d0dffba Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/7e91ad7bab6c76d5.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/80388eb9de4a9e91.csv b/cpp/test/tools/e2e/fixtures/recorded/80388eb9de4a9e91.csv new file mode 100644 index 000000000..763ea8d00 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/80388eb9de4a9e91.csv @@ -0,0 +1,2 @@ +time,s1 +0,2147483647 diff --git a/cpp/test/tools/e2e/fixtures/recorded/856f46a20c5f7c7b.csv b/cpp/test/tools/e2e/fixtures/recorded/856f46a20c5f7c7b.csv new file mode 100644 index 000000000..2b40aac9e --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/856f46a20c5f7c7b.csv @@ -0,0 +1,2 @@ +time,id,note +0,dev,"a,b ""q"" c" diff --git a/cpp/test/tools/e2e/fixtures/recorded/87d4e8b040a0e258.tsfile b/cpp/test/tools/e2e/fixtures/recorded/87d4e8b040a0e258.tsfile new file mode 100644 index 000000000..bd4538893 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/87d4e8b040a0e258.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/891a43b84b1ac825.csv b/cpp/test/tools/e2e/fixtures/recorded/891a43b84b1ac825.csv new file mode 100644 index 000000000..5dc357c3f --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/891a43b84b1ac825.csv @@ -0,0 +1,2 @@ +time,s1 +0,notanumber diff --git a/cpp/test/tools/e2e/fixtures/recorded/89472d6be3e8a4f2.tsfile b/cpp/test/tools/e2e/fixtures/recorded/89472d6be3e8a4f2.tsfile new file mode 100644 index 000000000..78fa7eb99 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/89472d6be3e8a4f2.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/8b4b9aa145a1d812.tsfile b/cpp/test/tools/e2e/fixtures/recorded/8b4b9aa145a1d812.tsfile new file mode 100644 index 000000000..4c49461e1 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/8b4b9aa145a1d812.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/8c384af9ff83865c.tsfile b/cpp/test/tools/e2e/fixtures/recorded/8c384af9ff83865c.tsfile new file mode 100644 index 000000000..106bace75 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/8c384af9ff83865c.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/8cd34bf42ce458c6.txt b/cpp/test/tools/e2e/fixtures/recorded/8cd34bf42ce458c6.txt new file mode 100644 index 000000000..c81d3bc2a --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/8cd34bf42ce458c6.txt @@ -0,0 +1 @@ +do not replace \ No newline at end of file diff --git a/cpp/test/tools/e2e/fixtures/recorded/956fbe6974cab2b1.tsfile b/cpp/test/tools/e2e/fixtures/recorded/956fbe6974cab2b1.tsfile new file mode 100644 index 000000000..26a7082d9 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/956fbe6974cab2b1.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/9b943a465ab2e97e.tsfile b/cpp/test/tools/e2e/fixtures/recorded/9b943a465ab2e97e.tsfile new file mode 100644 index 000000000..efeea559f Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/9b943a465ab2e97e.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/9f14fda22c4e2ba7.csv b/cpp/test/tools/e2e/fixtures/recorded/9f14fda22c4e2ba7.csv new file mode 100644 index 000000000..ef62b5c8c --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/9f14fda22c4e2ba7.csv @@ -0,0 +1,2 @@ +time,ID,S1 +0,a,1 diff --git a/cpp/test/tools/e2e/fixtures/recorded/9fe4acf66641a6f7.csv b/cpp/test/tools/e2e/fixtures/recorded/9fe4acf66641a6f7.csv new file mode 100644 index 000000000..daa29420d --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/9fe4acf66641a6f7.csv @@ -0,0 +1,2501 @@ +time,id,n,note +0,dev,0,row0 +1,dev,3,row1 +2,dev,6,row2 +3,dev,9,row3 +4,dev,12,row4 +5,dev,15,row5 +6,dev,18,row6 +7,dev,21,row7 +8,dev,24,row8 +9,dev,27,row9 +10,dev,30,row10 +11,dev,33,row11 +12,dev,36,row12 +13,dev,39,row13 +14,dev,42,row14 +15,dev,45,row15 +16,dev,48,row16 +17,dev,51,row17 +18,dev,54,row18 +19,dev,57,row19 +20,dev,60,row20 +21,dev,63,row21 +22,dev,66,row22 +23,dev,69,row23 +24,dev,72,row24 +25,dev,75,row25 +26,dev,78,row26 +27,dev,81,row27 +28,dev,84,row28 +29,dev,87,row29 +30,dev,90,row30 +31,dev,93,row31 +32,dev,96,row32 +33,dev,99,row33 +34,dev,102,row34 +35,dev,105,row35 +36,dev,108,row36 +37,dev,111,row37 +38,dev,114,row38 +39,dev,117,row39 +40,dev,120,row40 +41,dev,123,row41 +42,dev,126,row42 +43,dev,129,row43 +44,dev,132,row44 +45,dev,135,row45 +46,dev,138,row46 +47,dev,141,row47 +48,dev,144,row48 +49,dev,147,row49 +50,dev,150,row50 +51,dev,153,row51 +52,dev,156,row52 +53,dev,159,row53 +54,dev,162,row54 +55,dev,165,row55 +56,dev,168,row56 +57,dev,171,row57 +58,dev,174,row58 +59,dev,177,row59 +60,dev,180,row60 +61,dev,183,row61 +62,dev,186,row62 +63,dev,189,row63 +64,dev,192,row64 +65,dev,195,row65 +66,dev,198,row66 +67,dev,201,row67 +68,dev,204,row68 +69,dev,207,row69 +70,dev,210,row70 +71,dev,213,row71 +72,dev,216,row72 +73,dev,219,row73 +74,dev,222,row74 +75,dev,225,row75 +76,dev,228,row76 +77,dev,231,row77 +78,dev,234,row78 +79,dev,237,row79 +80,dev,240,row80 +81,dev,243,row81 +82,dev,246,row82 +83,dev,249,row83 +84,dev,252,row84 +85,dev,255,row85 +86,dev,258,row86 +87,dev,261,row87 +88,dev,264,row88 +89,dev,267,row89 +90,dev,270,row90 +91,dev,273,row91 +92,dev,276,row92 +93,dev,279,row93 +94,dev,282,row94 +95,dev,285,row95 +96,dev,288,row96 +97,dev,291,row97 +98,dev,294,row98 +99,dev,297,row99 +100,dev,300,row100 +101,dev,303,row101 +102,dev,306,row102 +103,dev,309,row103 +104,dev,312,row104 +105,dev,315,row105 +106,dev,318,row106 +107,dev,321,row107 +108,dev,324,row108 +109,dev,327,row109 +110,dev,330,row110 +111,dev,333,row111 +112,dev,336,row112 +113,dev,339,row113 +114,dev,342,row114 +115,dev,345,row115 +116,dev,348,row116 +117,dev,351,row117 +118,dev,354,row118 +119,dev,357,row119 +120,dev,360,row120 +121,dev,363,row121 +122,dev,366,row122 +123,dev,369,row123 +124,dev,372,row124 +125,dev,375,row125 +126,dev,378,row126 +127,dev,381,row127 +128,dev,384,row128 +129,dev,387,row129 +130,dev,390,row130 +131,dev,393,row131 +132,dev,396,row132 +133,dev,399,row133 +134,dev,402,row134 +135,dev,405,row135 +136,dev,408,row136 +137,dev,411,row137 +138,dev,414,row138 +139,dev,417,row139 +140,dev,420,row140 +141,dev,423,row141 +142,dev,426,row142 +143,dev,429,row143 +144,dev,432,row144 +145,dev,435,row145 +146,dev,438,row146 +147,dev,441,row147 +148,dev,444,row148 +149,dev,447,row149 +150,dev,450,row150 +151,dev,453,row151 +152,dev,456,row152 +153,dev,459,row153 +154,dev,462,row154 +155,dev,465,row155 +156,dev,468,row156 +157,dev,471,row157 +158,dev,474,row158 +159,dev,477,row159 +160,dev,480,row160 +161,dev,483,row161 +162,dev,486,row162 +163,dev,489,row163 +164,dev,492,row164 +165,dev,495,row165 +166,dev,498,row166 +167,dev,501,row167 +168,dev,504,row168 +169,dev,507,row169 +170,dev,510,row170 +171,dev,513,row171 +172,dev,516,row172 +173,dev,519,row173 +174,dev,522,row174 +175,dev,525,row175 +176,dev,528,row176 +177,dev,531,row177 +178,dev,534,row178 +179,dev,537,row179 +180,dev,540,row180 +181,dev,543,row181 +182,dev,546,row182 +183,dev,549,row183 +184,dev,552,row184 +185,dev,555,row185 +186,dev,558,row186 +187,dev,561,row187 +188,dev,564,row188 +189,dev,567,row189 +190,dev,570,row190 +191,dev,573,row191 +192,dev,576,row192 +193,dev,579,row193 +194,dev,582,row194 +195,dev,585,row195 +196,dev,588,row196 +197,dev,591,row197 +198,dev,594,row198 +199,dev,597,row199 +200,dev,600,row200 +201,dev,603,row201 +202,dev,606,row202 +203,dev,609,row203 +204,dev,612,row204 +205,dev,615,row205 +206,dev,618,row206 +207,dev,621,row207 +208,dev,624,row208 +209,dev,627,row209 +210,dev,630,row210 +211,dev,633,row211 +212,dev,636,row212 +213,dev,639,row213 +214,dev,642,row214 +215,dev,645,row215 +216,dev,648,row216 +217,dev,651,row217 +218,dev,654,row218 +219,dev,657,row219 +220,dev,660,row220 +221,dev,663,row221 +222,dev,666,row222 +223,dev,669,row223 +224,dev,672,row224 +225,dev,675,row225 +226,dev,678,row226 +227,dev,681,row227 +228,dev,684,row228 +229,dev,687,row229 +230,dev,690,row230 +231,dev,693,row231 +232,dev,696,row232 +233,dev,699,row233 +234,dev,702,row234 +235,dev,705,row235 +236,dev,708,row236 +237,dev,711,row237 +238,dev,714,row238 +239,dev,717,row239 +240,dev,720,row240 +241,dev,723,row241 +242,dev,726,row242 +243,dev,729,row243 +244,dev,732,row244 +245,dev,735,row245 +246,dev,738,row246 +247,dev,741,row247 +248,dev,744,row248 +249,dev,747,row249 +250,dev,750,row250 +251,dev,753,row251 +252,dev,756,row252 +253,dev,759,row253 +254,dev,762,row254 +255,dev,765,row255 +256,dev,768,row256 +257,dev,771,row257 +258,dev,774,row258 +259,dev,777,row259 +260,dev,780,row260 +261,dev,783,row261 +262,dev,786,row262 +263,dev,789,row263 +264,dev,792,row264 +265,dev,795,row265 +266,dev,798,row266 +267,dev,801,row267 +268,dev,804,row268 +269,dev,807,row269 +270,dev,810,row270 +271,dev,813,row271 +272,dev,816,row272 +273,dev,819,row273 +274,dev,822,row274 +275,dev,825,row275 +276,dev,828,row276 +277,dev,831,row277 +278,dev,834,row278 +279,dev,837,row279 +280,dev,840,row280 +281,dev,843,row281 +282,dev,846,row282 +283,dev,849,row283 +284,dev,852,row284 +285,dev,855,row285 +286,dev,858,row286 +287,dev,861,row287 +288,dev,864,row288 +289,dev,867,row289 +290,dev,870,row290 +291,dev,873,row291 +292,dev,876,row292 +293,dev,879,row293 +294,dev,882,row294 +295,dev,885,row295 +296,dev,888,row296 +297,dev,891,row297 +298,dev,894,row298 +299,dev,897,row299 +300,dev,900,row300 +301,dev,903,row301 +302,dev,906,row302 +303,dev,909,row303 +304,dev,912,row304 +305,dev,915,row305 +306,dev,918,row306 +307,dev,921,row307 +308,dev,924,row308 +309,dev,927,row309 +310,dev,930,row310 +311,dev,933,row311 +312,dev,936,row312 +313,dev,939,row313 +314,dev,942,row314 +315,dev,945,row315 +316,dev,948,row316 +317,dev,951,row317 +318,dev,954,row318 +319,dev,957,row319 +320,dev,960,row320 +321,dev,963,row321 +322,dev,966,row322 +323,dev,969,row323 +324,dev,972,row324 +325,dev,975,row325 +326,dev,978,row326 +327,dev,981,row327 +328,dev,984,row328 +329,dev,987,row329 +330,dev,990,row330 +331,dev,993,row331 +332,dev,996,row332 +333,dev,999,row333 +334,dev,1002,row334 +335,dev,1005,row335 +336,dev,1008,row336 +337,dev,1011,row337 +338,dev,1014,row338 +339,dev,1017,row339 +340,dev,1020,row340 +341,dev,1023,row341 +342,dev,1026,row342 +343,dev,1029,row343 +344,dev,1032,row344 +345,dev,1035,row345 +346,dev,1038,row346 +347,dev,1041,row347 +348,dev,1044,row348 +349,dev,1047,row349 +350,dev,1050,row350 +351,dev,1053,row351 +352,dev,1056,row352 +353,dev,1059,row353 +354,dev,1062,row354 +355,dev,1065,row355 +356,dev,1068,row356 +357,dev,1071,row357 +358,dev,1074,row358 +359,dev,1077,row359 +360,dev,1080,row360 +361,dev,1083,row361 +362,dev,1086,row362 +363,dev,1089,row363 +364,dev,1092,row364 +365,dev,1095,row365 +366,dev,1098,row366 +367,dev,1101,row367 +368,dev,1104,row368 +369,dev,1107,row369 +370,dev,1110,row370 +371,dev,1113,row371 +372,dev,1116,row372 +373,dev,1119,row373 +374,dev,1122,row374 +375,dev,1125,row375 +376,dev,1128,row376 +377,dev,1131,row377 +378,dev,1134,row378 +379,dev,1137,row379 +380,dev,1140,row380 +381,dev,1143,row381 +382,dev,1146,row382 +383,dev,1149,row383 +384,dev,1152,row384 +385,dev,1155,row385 +386,dev,1158,row386 +387,dev,1161,row387 +388,dev,1164,row388 +389,dev,1167,row389 +390,dev,1170,row390 +391,dev,1173,row391 +392,dev,1176,row392 +393,dev,1179,row393 +394,dev,1182,row394 +395,dev,1185,row395 +396,dev,1188,row396 +397,dev,1191,row397 +398,dev,1194,row398 +399,dev,1197,row399 +400,dev,1200,row400 +401,dev,1203,row401 +402,dev,1206,row402 +403,dev,1209,row403 +404,dev,1212,row404 +405,dev,1215,row405 +406,dev,1218,row406 +407,dev,1221,row407 +408,dev,1224,row408 +409,dev,1227,row409 +410,dev,1230,row410 +411,dev,1233,row411 +412,dev,1236,row412 +413,dev,1239,row413 +414,dev,1242,row414 +415,dev,1245,row415 +416,dev,1248,row416 +417,dev,1251,row417 +418,dev,1254,row418 +419,dev,1257,row419 +420,dev,1260,row420 +421,dev,1263,row421 +422,dev,1266,row422 +423,dev,1269,row423 +424,dev,1272,row424 +425,dev,1275,row425 +426,dev,1278,row426 +427,dev,1281,row427 +428,dev,1284,row428 +429,dev,1287,row429 +430,dev,1290,row430 +431,dev,1293,row431 +432,dev,1296,row432 +433,dev,1299,row433 +434,dev,1302,row434 +435,dev,1305,row435 +436,dev,1308,row436 +437,dev,1311,row437 +438,dev,1314,row438 +439,dev,1317,row439 +440,dev,1320,row440 +441,dev,1323,row441 +442,dev,1326,row442 +443,dev,1329,row443 +444,dev,1332,row444 +445,dev,1335,row445 +446,dev,1338,row446 +447,dev,1341,row447 +448,dev,1344,row448 +449,dev,1347,row449 +450,dev,1350,row450 +451,dev,1353,row451 +452,dev,1356,row452 +453,dev,1359,row453 +454,dev,1362,row454 +455,dev,1365,row455 +456,dev,1368,row456 +457,dev,1371,row457 +458,dev,1374,row458 +459,dev,1377,row459 +460,dev,1380,row460 +461,dev,1383,row461 +462,dev,1386,row462 +463,dev,1389,row463 +464,dev,1392,row464 +465,dev,1395,row465 +466,dev,1398,row466 +467,dev,1401,row467 +468,dev,1404,row468 +469,dev,1407,row469 +470,dev,1410,row470 +471,dev,1413,row471 +472,dev,1416,row472 +473,dev,1419,row473 +474,dev,1422,row474 +475,dev,1425,row475 +476,dev,1428,row476 +477,dev,1431,row477 +478,dev,1434,row478 +479,dev,1437,row479 +480,dev,1440,row480 +481,dev,1443,row481 +482,dev,1446,row482 +483,dev,1449,row483 +484,dev,1452,row484 +485,dev,1455,row485 +486,dev,1458,row486 +487,dev,1461,row487 +488,dev,1464,row488 +489,dev,1467,row489 +490,dev,1470,row490 +491,dev,1473,row491 +492,dev,1476,row492 +493,dev,1479,row493 +494,dev,1482,row494 +495,dev,1485,row495 +496,dev,1488,row496 +497,dev,1491,row497 +498,dev,1494,row498 +499,dev,1497,row499 +500,dev,1500,row500 +501,dev,1503,row501 +502,dev,1506,row502 +503,dev,1509,row503 +504,dev,1512,row504 +505,dev,1515,row505 +506,dev,1518,row506 +507,dev,1521,row507 +508,dev,1524,row508 +509,dev,1527,row509 +510,dev,1530,row510 +511,dev,1533,row511 +512,dev,1536,row512 +513,dev,1539,row513 +514,dev,1542,row514 +515,dev,1545,row515 +516,dev,1548,row516 +517,dev,1551,row517 +518,dev,1554,row518 +519,dev,1557,row519 +520,dev,1560,row520 +521,dev,1563,row521 +522,dev,1566,row522 +523,dev,1569,row523 +524,dev,1572,row524 +525,dev,1575,row525 +526,dev,1578,row526 +527,dev,1581,row527 +528,dev,1584,row528 +529,dev,1587,row529 +530,dev,1590,row530 +531,dev,1593,row531 +532,dev,1596,row532 +533,dev,1599,row533 +534,dev,1602,row534 +535,dev,1605,row535 +536,dev,1608,row536 +537,dev,1611,row537 +538,dev,1614,row538 +539,dev,1617,row539 +540,dev,1620,row540 +541,dev,1623,row541 +542,dev,1626,row542 +543,dev,1629,row543 +544,dev,1632,row544 +545,dev,1635,row545 +546,dev,1638,row546 +547,dev,1641,row547 +548,dev,1644,row548 +549,dev,1647,row549 +550,dev,1650,row550 +551,dev,1653,row551 +552,dev,1656,row552 +553,dev,1659,row553 +554,dev,1662,row554 +555,dev,1665,row555 +556,dev,1668,row556 +557,dev,1671,row557 +558,dev,1674,row558 +559,dev,1677,row559 +560,dev,1680,row560 +561,dev,1683,row561 +562,dev,1686,row562 +563,dev,1689,row563 +564,dev,1692,row564 +565,dev,1695,row565 +566,dev,1698,row566 +567,dev,1701,row567 +568,dev,1704,row568 +569,dev,1707,row569 +570,dev,1710,row570 +571,dev,1713,row571 +572,dev,1716,row572 +573,dev,1719,row573 +574,dev,1722,row574 +575,dev,1725,row575 +576,dev,1728,row576 +577,dev,1731,row577 +578,dev,1734,row578 +579,dev,1737,row579 +580,dev,1740,row580 +581,dev,1743,row581 +582,dev,1746,row582 +583,dev,1749,row583 +584,dev,1752,row584 +585,dev,1755,row585 +586,dev,1758,row586 +587,dev,1761,row587 +588,dev,1764,row588 +589,dev,1767,row589 +590,dev,1770,row590 +591,dev,1773,row591 +592,dev,1776,row592 +593,dev,1779,row593 +594,dev,1782,row594 +595,dev,1785,row595 +596,dev,1788,row596 +597,dev,1791,row597 +598,dev,1794,row598 +599,dev,1797,row599 +600,dev,1800,row600 +601,dev,1803,row601 +602,dev,1806,row602 +603,dev,1809,row603 +604,dev,1812,row604 +605,dev,1815,row605 +606,dev,1818,row606 +607,dev,1821,row607 +608,dev,1824,row608 +609,dev,1827,row609 +610,dev,1830,row610 +611,dev,1833,row611 +612,dev,1836,row612 +613,dev,1839,row613 +614,dev,1842,row614 +615,dev,1845,row615 +616,dev,1848,row616 +617,dev,1851,row617 +618,dev,1854,row618 +619,dev,1857,row619 +620,dev,1860,row620 +621,dev,1863,row621 +622,dev,1866,row622 +623,dev,1869,row623 +624,dev,1872,row624 +625,dev,1875,row625 +626,dev,1878,row626 +627,dev,1881,row627 +628,dev,1884,row628 +629,dev,1887,row629 +630,dev,1890,row630 +631,dev,1893,row631 +632,dev,1896,row632 +633,dev,1899,row633 +634,dev,1902,row634 +635,dev,1905,row635 +636,dev,1908,row636 +637,dev,1911,row637 +638,dev,1914,row638 +639,dev,1917,row639 +640,dev,1920,row640 +641,dev,1923,row641 +642,dev,1926,row642 +643,dev,1929,row643 +644,dev,1932,row644 +645,dev,1935,row645 +646,dev,1938,row646 +647,dev,1941,row647 +648,dev,1944,row648 +649,dev,1947,row649 +650,dev,1950,row650 +651,dev,1953,row651 +652,dev,1956,row652 +653,dev,1959,row653 +654,dev,1962,row654 +655,dev,1965,row655 +656,dev,1968,row656 +657,dev,1971,row657 +658,dev,1974,row658 +659,dev,1977,row659 +660,dev,1980,row660 +661,dev,1983,row661 +662,dev,1986,row662 +663,dev,1989,row663 +664,dev,1992,row664 +665,dev,1995,row665 +666,dev,1998,row666 +667,dev,2001,row667 +668,dev,2004,row668 +669,dev,2007,row669 +670,dev,2010,row670 +671,dev,2013,row671 +672,dev,2016,row672 +673,dev,2019,row673 +674,dev,2022,row674 +675,dev,2025,row675 +676,dev,2028,row676 +677,dev,2031,row677 +678,dev,2034,row678 +679,dev,2037,row679 +680,dev,2040,row680 +681,dev,2043,row681 +682,dev,2046,row682 +683,dev,2049,row683 +684,dev,2052,row684 +685,dev,2055,row685 +686,dev,2058,row686 +687,dev,2061,row687 +688,dev,2064,row688 +689,dev,2067,row689 +690,dev,2070,row690 +691,dev,2073,row691 +692,dev,2076,row692 +693,dev,2079,row693 +694,dev,2082,row694 +695,dev,2085,row695 +696,dev,2088,row696 +697,dev,2091,row697 +698,dev,2094,row698 +699,dev,2097,row699 +700,dev,2100,row700 +701,dev,2103,row701 +702,dev,2106,row702 +703,dev,2109,row703 +704,dev,2112,row704 +705,dev,2115,row705 +706,dev,2118,row706 +707,dev,2121,row707 +708,dev,2124,row708 +709,dev,2127,row709 +710,dev,2130,row710 +711,dev,2133,row711 +712,dev,2136,row712 +713,dev,2139,row713 +714,dev,2142,row714 +715,dev,2145,row715 +716,dev,2148,row716 +717,dev,2151,row717 +718,dev,2154,row718 +719,dev,2157,row719 +720,dev,2160,row720 +721,dev,2163,row721 +722,dev,2166,row722 +723,dev,2169,row723 +724,dev,2172,row724 +725,dev,2175,row725 +726,dev,2178,row726 +727,dev,2181,row727 +728,dev,2184,row728 +729,dev,2187,row729 +730,dev,2190,row730 +731,dev,2193,row731 +732,dev,2196,row732 +733,dev,2199,row733 +734,dev,2202,row734 +735,dev,2205,row735 +736,dev,2208,row736 +737,dev,2211,row737 +738,dev,2214,row738 +739,dev,2217,row739 +740,dev,2220,row740 +741,dev,2223,row741 +742,dev,2226,row742 +743,dev,2229,row743 +744,dev,2232,row744 +745,dev,2235,row745 +746,dev,2238,row746 +747,dev,2241,row747 +748,dev,2244,row748 +749,dev,2247,row749 +750,dev,2250,row750 +751,dev,2253,row751 +752,dev,2256,row752 +753,dev,2259,row753 +754,dev,2262,row754 +755,dev,2265,row755 +756,dev,2268,row756 +757,dev,2271,row757 +758,dev,2274,row758 +759,dev,2277,row759 +760,dev,2280,row760 +761,dev,2283,row761 +762,dev,2286,row762 +763,dev,2289,row763 +764,dev,2292,row764 +765,dev,2295,row765 +766,dev,2298,row766 +767,dev,2301,row767 +768,dev,2304,row768 +769,dev,2307,row769 +770,dev,2310,row770 +771,dev,2313,row771 +772,dev,2316,row772 +773,dev,2319,row773 +774,dev,2322,row774 +775,dev,2325,row775 +776,dev,2328,row776 +777,dev,2331,row777 +778,dev,2334,row778 +779,dev,2337,row779 +780,dev,2340,row780 +781,dev,2343,row781 +782,dev,2346,row782 +783,dev,2349,row783 +784,dev,2352,row784 +785,dev,2355,row785 +786,dev,2358,row786 +787,dev,2361,row787 +788,dev,2364,row788 +789,dev,2367,row789 +790,dev,2370,row790 +791,dev,2373,row791 +792,dev,2376,row792 +793,dev,2379,row793 +794,dev,2382,row794 +795,dev,2385,row795 +796,dev,2388,row796 +797,dev,2391,row797 +798,dev,2394,row798 +799,dev,2397,row799 +800,dev,2400,row800 +801,dev,2403,row801 +802,dev,2406,row802 +803,dev,2409,row803 +804,dev,2412,row804 +805,dev,2415,row805 +806,dev,2418,row806 +807,dev,2421,row807 +808,dev,2424,row808 +809,dev,2427,row809 +810,dev,2430,row810 +811,dev,2433,row811 +812,dev,2436,row812 +813,dev,2439,row813 +814,dev,2442,row814 +815,dev,2445,row815 +816,dev,2448,row816 +817,dev,2451,row817 +818,dev,2454,row818 +819,dev,2457,row819 +820,dev,2460,row820 +821,dev,2463,row821 +822,dev,2466,row822 +823,dev,2469,row823 +824,dev,2472,row824 +825,dev,2475,row825 +826,dev,2478,row826 +827,dev,2481,row827 +828,dev,2484,row828 +829,dev,2487,row829 +830,dev,2490,row830 +831,dev,2493,row831 +832,dev,2496,row832 +833,dev,2499,row833 +834,dev,2502,row834 +835,dev,2505,row835 +836,dev,2508,row836 +837,dev,2511,row837 +838,dev,2514,row838 +839,dev,2517,row839 +840,dev,2520,row840 +841,dev,2523,row841 +842,dev,2526,row842 +843,dev,2529,row843 +844,dev,2532,row844 +845,dev,2535,row845 +846,dev,2538,row846 +847,dev,2541,row847 +848,dev,2544,row848 +849,dev,2547,row849 +850,dev,2550,row850 +851,dev,2553,row851 +852,dev,2556,row852 +853,dev,2559,row853 +854,dev,2562,row854 +855,dev,2565,row855 +856,dev,2568,row856 +857,dev,2571,row857 +858,dev,2574,row858 +859,dev,2577,row859 +860,dev,2580,row860 +861,dev,2583,row861 +862,dev,2586,row862 +863,dev,2589,row863 +864,dev,2592,row864 +865,dev,2595,row865 +866,dev,2598,row866 +867,dev,2601,row867 +868,dev,2604,row868 +869,dev,2607,row869 +870,dev,2610,row870 +871,dev,2613,row871 +872,dev,2616,row872 +873,dev,2619,row873 +874,dev,2622,row874 +875,dev,2625,row875 +876,dev,2628,row876 +877,dev,2631,row877 +878,dev,2634,row878 +879,dev,2637,row879 +880,dev,2640,row880 +881,dev,2643,row881 +882,dev,2646,row882 +883,dev,2649,row883 +884,dev,2652,row884 +885,dev,2655,row885 +886,dev,2658,row886 +887,dev,2661,row887 +888,dev,2664,row888 +889,dev,2667,row889 +890,dev,2670,row890 +891,dev,2673,row891 +892,dev,2676,row892 +893,dev,2679,row893 +894,dev,2682,row894 +895,dev,2685,row895 +896,dev,2688,row896 +897,dev,2691,row897 +898,dev,2694,row898 +899,dev,2697,row899 +900,dev,2700,row900 +901,dev,2703,row901 +902,dev,2706,row902 +903,dev,2709,row903 +904,dev,2712,row904 +905,dev,2715,row905 +906,dev,2718,row906 +907,dev,2721,row907 +908,dev,2724,row908 +909,dev,2727,row909 +910,dev,2730,row910 +911,dev,2733,row911 +912,dev,2736,row912 +913,dev,2739,row913 +914,dev,2742,row914 +915,dev,2745,row915 +916,dev,2748,row916 +917,dev,2751,row917 +918,dev,2754,row918 +919,dev,2757,row919 +920,dev,2760,row920 +921,dev,2763,row921 +922,dev,2766,row922 +923,dev,2769,row923 +924,dev,2772,row924 +925,dev,2775,row925 +926,dev,2778,row926 +927,dev,2781,row927 +928,dev,2784,row928 +929,dev,2787,row929 +930,dev,2790,row930 +931,dev,2793,row931 +932,dev,2796,row932 +933,dev,2799,row933 +934,dev,2802,row934 +935,dev,2805,row935 +936,dev,2808,row936 +937,dev,2811,row937 +938,dev,2814,row938 +939,dev,2817,row939 +940,dev,2820,row940 +941,dev,2823,row941 +942,dev,2826,row942 +943,dev,2829,row943 +944,dev,2832,row944 +945,dev,2835,row945 +946,dev,2838,row946 +947,dev,2841,row947 +948,dev,2844,row948 +949,dev,2847,row949 +950,dev,2850,row950 +951,dev,2853,row951 +952,dev,2856,row952 +953,dev,2859,row953 +954,dev,2862,row954 +955,dev,2865,row955 +956,dev,2868,row956 +957,dev,2871,row957 +958,dev,2874,row958 +959,dev,2877,row959 +960,dev,2880,row960 +961,dev,2883,row961 +962,dev,2886,row962 +963,dev,2889,row963 +964,dev,2892,row964 +965,dev,2895,row965 +966,dev,2898,row966 +967,dev,2901,row967 +968,dev,2904,row968 +969,dev,2907,row969 +970,dev,2910,row970 +971,dev,2913,row971 +972,dev,2916,row972 +973,dev,2919,row973 +974,dev,2922,row974 +975,dev,2925,row975 +976,dev,2928,row976 +977,dev,2931,row977 +978,dev,2934,row978 +979,dev,2937,row979 +980,dev,2940,row980 +981,dev,2943,row981 +982,dev,2946,row982 +983,dev,2949,row983 +984,dev,2952,row984 +985,dev,2955,row985 +986,dev,2958,row986 +987,dev,2961,row987 +988,dev,2964,row988 +989,dev,2967,row989 +990,dev,2970,row990 +991,dev,2973,row991 +992,dev,2976,row992 +993,dev,2979,row993 +994,dev,2982,row994 +995,dev,2985,row995 +996,dev,2988,row996 +997,dev,2991,row997 +998,dev,2994,row998 +999,dev,2997,row999 +1000,dev,3000,row1000 +1001,dev,3003,row1001 +1002,dev,3006,row1002 +1003,dev,3009,row1003 +1004,dev,3012,row1004 +1005,dev,3015,row1005 +1006,dev,3018,row1006 +1007,dev,3021,row1007 +1008,dev,3024,row1008 +1009,dev,3027,row1009 +1010,dev,3030,row1010 +1011,dev,3033,row1011 +1012,dev,3036,row1012 +1013,dev,3039,row1013 +1014,dev,3042,row1014 +1015,dev,3045,row1015 +1016,dev,3048,row1016 +1017,dev,3051,row1017 +1018,dev,3054,row1018 +1019,dev,3057,row1019 +1020,dev,3060,row1020 +1021,dev,3063,row1021 +1022,dev,3066,row1022 +1023,dev,3069,row1023 +1024,dev,3072,row1024 +1025,dev,3075,row1025 +1026,dev,3078,row1026 +1027,dev,3081,row1027 +1028,dev,3084,row1028 +1029,dev,3087,row1029 +1030,dev,3090,row1030 +1031,dev,3093,row1031 +1032,dev,3096,row1032 +1033,dev,3099,row1033 +1034,dev,3102,row1034 +1035,dev,3105,row1035 +1036,dev,3108,row1036 +1037,dev,3111,row1037 +1038,dev,3114,row1038 +1039,dev,3117,row1039 +1040,dev,3120,row1040 +1041,dev,3123,row1041 +1042,dev,3126,row1042 +1043,dev,3129,row1043 +1044,dev,3132,row1044 +1045,dev,3135,row1045 +1046,dev,3138,row1046 +1047,dev,3141,row1047 +1048,dev,3144,row1048 +1049,dev,3147,row1049 +1050,dev,3150,row1050 +1051,dev,3153,row1051 +1052,dev,3156,row1052 +1053,dev,3159,row1053 +1054,dev,3162,row1054 +1055,dev,3165,row1055 +1056,dev,3168,row1056 +1057,dev,3171,row1057 +1058,dev,3174,row1058 +1059,dev,3177,row1059 +1060,dev,3180,row1060 +1061,dev,3183,row1061 +1062,dev,3186,row1062 +1063,dev,3189,row1063 +1064,dev,3192,row1064 +1065,dev,3195,row1065 +1066,dev,3198,row1066 +1067,dev,3201,row1067 +1068,dev,3204,row1068 +1069,dev,3207,row1069 +1070,dev,3210,row1070 +1071,dev,3213,row1071 +1072,dev,3216,row1072 +1073,dev,3219,row1073 +1074,dev,3222,row1074 +1075,dev,3225,row1075 +1076,dev,3228,row1076 +1077,dev,3231,row1077 +1078,dev,3234,row1078 +1079,dev,3237,row1079 +1080,dev,3240,row1080 +1081,dev,3243,row1081 +1082,dev,3246,row1082 +1083,dev,3249,row1083 +1084,dev,3252,row1084 +1085,dev,3255,row1085 +1086,dev,3258,row1086 +1087,dev,3261,row1087 +1088,dev,3264,row1088 +1089,dev,3267,row1089 +1090,dev,3270,row1090 +1091,dev,3273,row1091 +1092,dev,3276,row1092 +1093,dev,3279,row1093 +1094,dev,3282,row1094 +1095,dev,3285,row1095 +1096,dev,3288,row1096 +1097,dev,3291,row1097 +1098,dev,3294,row1098 +1099,dev,3297,row1099 +1100,dev,3300,row1100 +1101,dev,3303,row1101 +1102,dev,3306,row1102 +1103,dev,3309,row1103 +1104,dev,3312,row1104 +1105,dev,3315,row1105 +1106,dev,3318,row1106 +1107,dev,3321,row1107 +1108,dev,3324,row1108 +1109,dev,3327,row1109 +1110,dev,3330,row1110 +1111,dev,3333,row1111 +1112,dev,3336,row1112 +1113,dev,3339,row1113 +1114,dev,3342,row1114 +1115,dev,3345,row1115 +1116,dev,3348,row1116 +1117,dev,3351,row1117 +1118,dev,3354,row1118 +1119,dev,3357,row1119 +1120,dev,3360,row1120 +1121,dev,3363,row1121 +1122,dev,3366,row1122 +1123,dev,3369,row1123 +1124,dev,3372,row1124 +1125,dev,3375,row1125 +1126,dev,3378,row1126 +1127,dev,3381,row1127 +1128,dev,3384,row1128 +1129,dev,3387,row1129 +1130,dev,3390,row1130 +1131,dev,3393,row1131 +1132,dev,3396,row1132 +1133,dev,3399,row1133 +1134,dev,3402,row1134 +1135,dev,3405,row1135 +1136,dev,3408,row1136 +1137,dev,3411,row1137 +1138,dev,3414,row1138 +1139,dev,3417,row1139 +1140,dev,3420,row1140 +1141,dev,3423,row1141 +1142,dev,3426,row1142 +1143,dev,3429,row1143 +1144,dev,3432,row1144 +1145,dev,3435,row1145 +1146,dev,3438,row1146 +1147,dev,3441,row1147 +1148,dev,3444,row1148 +1149,dev,3447,row1149 +1150,dev,3450,row1150 +1151,dev,3453,row1151 +1152,dev,3456,row1152 +1153,dev,3459,row1153 +1154,dev,3462,row1154 +1155,dev,3465,row1155 +1156,dev,3468,row1156 +1157,dev,3471,row1157 +1158,dev,3474,row1158 +1159,dev,3477,row1159 +1160,dev,3480,row1160 +1161,dev,3483,row1161 +1162,dev,3486,row1162 +1163,dev,3489,row1163 +1164,dev,3492,row1164 +1165,dev,3495,row1165 +1166,dev,3498,row1166 +1167,dev,3501,row1167 +1168,dev,3504,row1168 +1169,dev,3507,row1169 +1170,dev,3510,row1170 +1171,dev,3513,row1171 +1172,dev,3516,row1172 +1173,dev,3519,row1173 +1174,dev,3522,row1174 +1175,dev,3525,row1175 +1176,dev,3528,row1176 +1177,dev,3531,row1177 +1178,dev,3534,row1178 +1179,dev,3537,row1179 +1180,dev,3540,row1180 +1181,dev,3543,row1181 +1182,dev,3546,row1182 +1183,dev,3549,row1183 +1184,dev,3552,row1184 +1185,dev,3555,row1185 +1186,dev,3558,row1186 +1187,dev,3561,row1187 +1188,dev,3564,row1188 +1189,dev,3567,row1189 +1190,dev,3570,row1190 +1191,dev,3573,row1191 +1192,dev,3576,row1192 +1193,dev,3579,row1193 +1194,dev,3582,row1194 +1195,dev,3585,row1195 +1196,dev,3588,row1196 +1197,dev,3591,row1197 +1198,dev,3594,row1198 +1199,dev,3597,row1199 +1200,dev,3600,row1200 +1201,dev,3603,row1201 +1202,dev,3606,row1202 +1203,dev,3609,row1203 +1204,dev,3612,row1204 +1205,dev,3615,row1205 +1206,dev,3618,row1206 +1207,dev,3621,row1207 +1208,dev,3624,row1208 +1209,dev,3627,row1209 +1210,dev,3630,row1210 +1211,dev,3633,row1211 +1212,dev,3636,row1212 +1213,dev,3639,row1213 +1214,dev,3642,row1214 +1215,dev,3645,row1215 +1216,dev,3648,row1216 +1217,dev,3651,row1217 +1218,dev,3654,row1218 +1219,dev,3657,row1219 +1220,dev,3660,row1220 +1221,dev,3663,row1221 +1222,dev,3666,row1222 +1223,dev,3669,row1223 +1224,dev,3672,row1224 +1225,dev,3675,row1225 +1226,dev,3678,row1226 +1227,dev,3681,row1227 +1228,dev,3684,row1228 +1229,dev,3687,row1229 +1230,dev,3690,row1230 +1231,dev,3693,row1231 +1232,dev,3696,row1232 +1233,dev,3699,row1233 +1234,dev,3702,row1234 +1235,dev,3705,row1235 +1236,dev,3708,row1236 +1237,dev,3711,row1237 +1238,dev,3714,row1238 +1239,dev,3717,row1239 +1240,dev,3720,row1240 +1241,dev,3723,row1241 +1242,dev,3726,row1242 +1243,dev,3729,row1243 +1244,dev,3732,row1244 +1245,dev,3735,row1245 +1246,dev,3738,row1246 +1247,dev,3741,row1247 +1248,dev,3744,row1248 +1249,dev,3747,row1249 +1250,dev,3750,row1250 +1251,dev,3753,row1251 +1252,dev,3756,row1252 +1253,dev,3759,row1253 +1254,dev,3762,row1254 +1255,dev,3765,row1255 +1256,dev,3768,row1256 +1257,dev,3771,row1257 +1258,dev,3774,row1258 +1259,dev,3777,row1259 +1260,dev,3780,row1260 +1261,dev,3783,row1261 +1262,dev,3786,row1262 +1263,dev,3789,row1263 +1264,dev,3792,row1264 +1265,dev,3795,row1265 +1266,dev,3798,row1266 +1267,dev,3801,row1267 +1268,dev,3804,row1268 +1269,dev,3807,row1269 +1270,dev,3810,row1270 +1271,dev,3813,row1271 +1272,dev,3816,row1272 +1273,dev,3819,row1273 +1274,dev,3822,row1274 +1275,dev,3825,row1275 +1276,dev,3828,row1276 +1277,dev,3831,row1277 +1278,dev,3834,row1278 +1279,dev,3837,row1279 +1280,dev,3840,row1280 +1281,dev,3843,row1281 +1282,dev,3846,row1282 +1283,dev,3849,row1283 +1284,dev,3852,row1284 +1285,dev,3855,row1285 +1286,dev,3858,row1286 +1287,dev,3861,row1287 +1288,dev,3864,row1288 +1289,dev,3867,row1289 +1290,dev,3870,row1290 +1291,dev,3873,row1291 +1292,dev,3876,row1292 +1293,dev,3879,row1293 +1294,dev,3882,row1294 +1295,dev,3885,row1295 +1296,dev,3888,row1296 +1297,dev,3891,row1297 +1298,dev,3894,row1298 +1299,dev,3897,row1299 +1300,dev,3900,row1300 +1301,dev,3903,row1301 +1302,dev,3906,row1302 +1303,dev,3909,row1303 +1304,dev,3912,row1304 +1305,dev,3915,row1305 +1306,dev,3918,row1306 +1307,dev,3921,row1307 +1308,dev,3924,row1308 +1309,dev,3927,row1309 +1310,dev,3930,row1310 +1311,dev,3933,row1311 +1312,dev,3936,row1312 +1313,dev,3939,row1313 +1314,dev,3942,row1314 +1315,dev,3945,row1315 +1316,dev,3948,row1316 +1317,dev,3951,row1317 +1318,dev,3954,row1318 +1319,dev,3957,row1319 +1320,dev,3960,row1320 +1321,dev,3963,row1321 +1322,dev,3966,row1322 +1323,dev,3969,row1323 +1324,dev,3972,row1324 +1325,dev,3975,row1325 +1326,dev,3978,row1326 +1327,dev,3981,row1327 +1328,dev,3984,row1328 +1329,dev,3987,row1329 +1330,dev,3990,row1330 +1331,dev,3993,row1331 +1332,dev,3996,row1332 +1333,dev,3999,row1333 +1334,dev,4002,row1334 +1335,dev,4005,row1335 +1336,dev,4008,row1336 +1337,dev,4011,row1337 +1338,dev,4014,row1338 +1339,dev,4017,row1339 +1340,dev,4020,row1340 +1341,dev,4023,row1341 +1342,dev,4026,row1342 +1343,dev,4029,row1343 +1344,dev,4032,row1344 +1345,dev,4035,row1345 +1346,dev,4038,row1346 +1347,dev,4041,row1347 +1348,dev,4044,row1348 +1349,dev,4047,row1349 +1350,dev,4050,row1350 +1351,dev,4053,row1351 +1352,dev,4056,row1352 +1353,dev,4059,row1353 +1354,dev,4062,row1354 +1355,dev,4065,row1355 +1356,dev,4068,row1356 +1357,dev,4071,row1357 +1358,dev,4074,row1358 +1359,dev,4077,row1359 +1360,dev,4080,row1360 +1361,dev,4083,row1361 +1362,dev,4086,row1362 +1363,dev,4089,row1363 +1364,dev,4092,row1364 +1365,dev,4095,row1365 +1366,dev,4098,row1366 +1367,dev,4101,row1367 +1368,dev,4104,row1368 +1369,dev,4107,row1369 +1370,dev,4110,row1370 +1371,dev,4113,row1371 +1372,dev,4116,row1372 +1373,dev,4119,row1373 +1374,dev,4122,row1374 +1375,dev,4125,row1375 +1376,dev,4128,row1376 +1377,dev,4131,row1377 +1378,dev,4134,row1378 +1379,dev,4137,row1379 +1380,dev,4140,row1380 +1381,dev,4143,row1381 +1382,dev,4146,row1382 +1383,dev,4149,row1383 +1384,dev,4152,row1384 +1385,dev,4155,row1385 +1386,dev,4158,row1386 +1387,dev,4161,row1387 +1388,dev,4164,row1388 +1389,dev,4167,row1389 +1390,dev,4170,row1390 +1391,dev,4173,row1391 +1392,dev,4176,row1392 +1393,dev,4179,row1393 +1394,dev,4182,row1394 +1395,dev,4185,row1395 +1396,dev,4188,row1396 +1397,dev,4191,row1397 +1398,dev,4194,row1398 +1399,dev,4197,row1399 +1400,dev,4200,row1400 +1401,dev,4203,row1401 +1402,dev,4206,row1402 +1403,dev,4209,row1403 +1404,dev,4212,row1404 +1405,dev,4215,row1405 +1406,dev,4218,row1406 +1407,dev,4221,row1407 +1408,dev,4224,row1408 +1409,dev,4227,row1409 +1410,dev,4230,row1410 +1411,dev,4233,row1411 +1412,dev,4236,row1412 +1413,dev,4239,row1413 +1414,dev,4242,row1414 +1415,dev,4245,row1415 +1416,dev,4248,row1416 +1417,dev,4251,row1417 +1418,dev,4254,row1418 +1419,dev,4257,row1419 +1420,dev,4260,row1420 +1421,dev,4263,row1421 +1422,dev,4266,row1422 +1423,dev,4269,row1423 +1424,dev,4272,row1424 +1425,dev,4275,row1425 +1426,dev,4278,row1426 +1427,dev,4281,row1427 +1428,dev,4284,row1428 +1429,dev,4287,row1429 +1430,dev,4290,row1430 +1431,dev,4293,row1431 +1432,dev,4296,row1432 +1433,dev,4299,row1433 +1434,dev,4302,row1434 +1435,dev,4305,row1435 +1436,dev,4308,row1436 +1437,dev,4311,row1437 +1438,dev,4314,row1438 +1439,dev,4317,row1439 +1440,dev,4320,row1440 +1441,dev,4323,row1441 +1442,dev,4326,row1442 +1443,dev,4329,row1443 +1444,dev,4332,row1444 +1445,dev,4335,row1445 +1446,dev,4338,row1446 +1447,dev,4341,row1447 +1448,dev,4344,row1448 +1449,dev,4347,row1449 +1450,dev,4350,row1450 +1451,dev,4353,row1451 +1452,dev,4356,row1452 +1453,dev,4359,row1453 +1454,dev,4362,row1454 +1455,dev,4365,row1455 +1456,dev,4368,row1456 +1457,dev,4371,row1457 +1458,dev,4374,row1458 +1459,dev,4377,row1459 +1460,dev,4380,row1460 +1461,dev,4383,row1461 +1462,dev,4386,row1462 +1463,dev,4389,row1463 +1464,dev,4392,row1464 +1465,dev,4395,row1465 +1466,dev,4398,row1466 +1467,dev,4401,row1467 +1468,dev,4404,row1468 +1469,dev,4407,row1469 +1470,dev,4410,row1470 +1471,dev,4413,row1471 +1472,dev,4416,row1472 +1473,dev,4419,row1473 +1474,dev,4422,row1474 +1475,dev,4425,row1475 +1476,dev,4428,row1476 +1477,dev,4431,row1477 +1478,dev,4434,row1478 +1479,dev,4437,row1479 +1480,dev,4440,row1480 +1481,dev,4443,row1481 +1482,dev,4446,row1482 +1483,dev,4449,row1483 +1484,dev,4452,row1484 +1485,dev,4455,row1485 +1486,dev,4458,row1486 +1487,dev,4461,row1487 +1488,dev,4464,row1488 +1489,dev,4467,row1489 +1490,dev,4470,row1490 +1491,dev,4473,row1491 +1492,dev,4476,row1492 +1493,dev,4479,row1493 +1494,dev,4482,row1494 +1495,dev,4485,row1495 +1496,dev,4488,row1496 +1497,dev,4491,row1497 +1498,dev,4494,row1498 +1499,dev,4497,row1499 +1500,dev,4500,row1500 +1501,dev,4503,row1501 +1502,dev,4506,row1502 +1503,dev,4509,row1503 +1504,dev,4512,row1504 +1505,dev,4515,row1505 +1506,dev,4518,row1506 +1507,dev,4521,row1507 +1508,dev,4524,row1508 +1509,dev,4527,row1509 +1510,dev,4530,row1510 +1511,dev,4533,row1511 +1512,dev,4536,row1512 +1513,dev,4539,row1513 +1514,dev,4542,row1514 +1515,dev,4545,row1515 +1516,dev,4548,row1516 +1517,dev,4551,row1517 +1518,dev,4554,row1518 +1519,dev,4557,row1519 +1520,dev,4560,row1520 +1521,dev,4563,row1521 +1522,dev,4566,row1522 +1523,dev,4569,row1523 +1524,dev,4572,row1524 +1525,dev,4575,row1525 +1526,dev,4578,row1526 +1527,dev,4581,row1527 +1528,dev,4584,row1528 +1529,dev,4587,row1529 +1530,dev,4590,row1530 +1531,dev,4593,row1531 +1532,dev,4596,row1532 +1533,dev,4599,row1533 +1534,dev,4602,row1534 +1535,dev,4605,row1535 +1536,dev,4608,row1536 +1537,dev,4611,row1537 +1538,dev,4614,row1538 +1539,dev,4617,row1539 +1540,dev,4620,row1540 +1541,dev,4623,row1541 +1542,dev,4626,row1542 +1543,dev,4629,row1543 +1544,dev,4632,row1544 +1545,dev,4635,row1545 +1546,dev,4638,row1546 +1547,dev,4641,row1547 +1548,dev,4644,row1548 +1549,dev,4647,row1549 +1550,dev,4650,row1550 +1551,dev,4653,row1551 +1552,dev,4656,row1552 +1553,dev,4659,row1553 +1554,dev,4662,row1554 +1555,dev,4665,row1555 +1556,dev,4668,row1556 +1557,dev,4671,row1557 +1558,dev,4674,row1558 +1559,dev,4677,row1559 +1560,dev,4680,row1560 +1561,dev,4683,row1561 +1562,dev,4686,row1562 +1563,dev,4689,row1563 +1564,dev,4692,row1564 +1565,dev,4695,row1565 +1566,dev,4698,row1566 +1567,dev,4701,row1567 +1568,dev,4704,row1568 +1569,dev,4707,row1569 +1570,dev,4710,row1570 +1571,dev,4713,row1571 +1572,dev,4716,row1572 +1573,dev,4719,row1573 +1574,dev,4722,row1574 +1575,dev,4725,row1575 +1576,dev,4728,row1576 +1577,dev,4731,row1577 +1578,dev,4734,row1578 +1579,dev,4737,row1579 +1580,dev,4740,row1580 +1581,dev,4743,row1581 +1582,dev,4746,row1582 +1583,dev,4749,row1583 +1584,dev,4752,row1584 +1585,dev,4755,row1585 +1586,dev,4758,row1586 +1587,dev,4761,row1587 +1588,dev,4764,row1588 +1589,dev,4767,row1589 +1590,dev,4770,row1590 +1591,dev,4773,row1591 +1592,dev,4776,row1592 +1593,dev,4779,row1593 +1594,dev,4782,row1594 +1595,dev,4785,row1595 +1596,dev,4788,row1596 +1597,dev,4791,row1597 +1598,dev,4794,row1598 +1599,dev,4797,row1599 +1600,dev,4800,row1600 +1601,dev,4803,row1601 +1602,dev,4806,row1602 +1603,dev,4809,row1603 +1604,dev,4812,row1604 +1605,dev,4815,row1605 +1606,dev,4818,row1606 +1607,dev,4821,row1607 +1608,dev,4824,row1608 +1609,dev,4827,row1609 +1610,dev,4830,row1610 +1611,dev,4833,row1611 +1612,dev,4836,row1612 +1613,dev,4839,row1613 +1614,dev,4842,row1614 +1615,dev,4845,row1615 +1616,dev,4848,row1616 +1617,dev,4851,row1617 +1618,dev,4854,row1618 +1619,dev,4857,row1619 +1620,dev,4860,row1620 +1621,dev,4863,row1621 +1622,dev,4866,row1622 +1623,dev,4869,row1623 +1624,dev,4872,row1624 +1625,dev,4875,row1625 +1626,dev,4878,row1626 +1627,dev,4881,row1627 +1628,dev,4884,row1628 +1629,dev,4887,row1629 +1630,dev,4890,row1630 +1631,dev,4893,row1631 +1632,dev,4896,row1632 +1633,dev,4899,row1633 +1634,dev,4902,row1634 +1635,dev,4905,row1635 +1636,dev,4908,row1636 +1637,dev,4911,row1637 +1638,dev,4914,row1638 +1639,dev,4917,row1639 +1640,dev,4920,row1640 +1641,dev,4923,row1641 +1642,dev,4926,row1642 +1643,dev,4929,row1643 +1644,dev,4932,row1644 +1645,dev,4935,row1645 +1646,dev,4938,row1646 +1647,dev,4941,row1647 +1648,dev,4944,row1648 +1649,dev,4947,row1649 +1650,dev,4950,row1650 +1651,dev,4953,row1651 +1652,dev,4956,row1652 +1653,dev,4959,row1653 +1654,dev,4962,row1654 +1655,dev,4965,row1655 +1656,dev,4968,row1656 +1657,dev,4971,row1657 +1658,dev,4974,row1658 +1659,dev,4977,row1659 +1660,dev,4980,row1660 +1661,dev,4983,row1661 +1662,dev,4986,row1662 +1663,dev,4989,row1663 +1664,dev,4992,row1664 +1665,dev,4995,row1665 +1666,dev,4998,row1666 +1667,dev,5001,row1667 +1668,dev,5004,row1668 +1669,dev,5007,row1669 +1670,dev,5010,row1670 +1671,dev,5013,row1671 +1672,dev,5016,row1672 +1673,dev,5019,row1673 +1674,dev,5022,row1674 +1675,dev,5025,row1675 +1676,dev,5028,row1676 +1677,dev,5031,row1677 +1678,dev,5034,row1678 +1679,dev,5037,row1679 +1680,dev,5040,row1680 +1681,dev,5043,row1681 +1682,dev,5046,row1682 +1683,dev,5049,row1683 +1684,dev,5052,row1684 +1685,dev,5055,row1685 +1686,dev,5058,row1686 +1687,dev,5061,row1687 +1688,dev,5064,row1688 +1689,dev,5067,row1689 +1690,dev,5070,row1690 +1691,dev,5073,row1691 +1692,dev,5076,row1692 +1693,dev,5079,row1693 +1694,dev,5082,row1694 +1695,dev,5085,row1695 +1696,dev,5088,row1696 +1697,dev,5091,row1697 +1698,dev,5094,row1698 +1699,dev,5097,row1699 +1700,dev,5100,row1700 +1701,dev,5103,row1701 +1702,dev,5106,row1702 +1703,dev,5109,row1703 +1704,dev,5112,row1704 +1705,dev,5115,row1705 +1706,dev,5118,row1706 +1707,dev,5121,row1707 +1708,dev,5124,row1708 +1709,dev,5127,row1709 +1710,dev,5130,row1710 +1711,dev,5133,row1711 +1712,dev,5136,row1712 +1713,dev,5139,row1713 +1714,dev,5142,row1714 +1715,dev,5145,row1715 +1716,dev,5148,row1716 +1717,dev,5151,row1717 +1718,dev,5154,row1718 +1719,dev,5157,row1719 +1720,dev,5160,row1720 +1721,dev,5163,row1721 +1722,dev,5166,row1722 +1723,dev,5169,row1723 +1724,dev,5172,row1724 +1725,dev,5175,row1725 +1726,dev,5178,row1726 +1727,dev,5181,row1727 +1728,dev,5184,row1728 +1729,dev,5187,row1729 +1730,dev,5190,row1730 +1731,dev,5193,row1731 +1732,dev,5196,row1732 +1733,dev,5199,row1733 +1734,dev,5202,row1734 +1735,dev,5205,row1735 +1736,dev,5208,row1736 +1737,dev,5211,row1737 +1738,dev,5214,row1738 +1739,dev,5217,row1739 +1740,dev,5220,row1740 +1741,dev,5223,row1741 +1742,dev,5226,row1742 +1743,dev,5229,row1743 +1744,dev,5232,row1744 +1745,dev,5235,row1745 +1746,dev,5238,row1746 +1747,dev,5241,row1747 +1748,dev,5244,row1748 +1749,dev,5247,row1749 +1750,dev,5250,row1750 +1751,dev,5253,row1751 +1752,dev,5256,row1752 +1753,dev,5259,row1753 +1754,dev,5262,row1754 +1755,dev,5265,row1755 +1756,dev,5268,row1756 +1757,dev,5271,row1757 +1758,dev,5274,row1758 +1759,dev,5277,row1759 +1760,dev,5280,row1760 +1761,dev,5283,row1761 +1762,dev,5286,row1762 +1763,dev,5289,row1763 +1764,dev,5292,row1764 +1765,dev,5295,row1765 +1766,dev,5298,row1766 +1767,dev,5301,row1767 +1768,dev,5304,row1768 +1769,dev,5307,row1769 +1770,dev,5310,row1770 +1771,dev,5313,row1771 +1772,dev,5316,row1772 +1773,dev,5319,row1773 +1774,dev,5322,row1774 +1775,dev,5325,row1775 +1776,dev,5328,row1776 +1777,dev,5331,row1777 +1778,dev,5334,row1778 +1779,dev,5337,row1779 +1780,dev,5340,row1780 +1781,dev,5343,row1781 +1782,dev,5346,row1782 +1783,dev,5349,row1783 +1784,dev,5352,row1784 +1785,dev,5355,row1785 +1786,dev,5358,row1786 +1787,dev,5361,row1787 +1788,dev,5364,row1788 +1789,dev,5367,row1789 +1790,dev,5370,row1790 +1791,dev,5373,row1791 +1792,dev,5376,row1792 +1793,dev,5379,row1793 +1794,dev,5382,row1794 +1795,dev,5385,row1795 +1796,dev,5388,row1796 +1797,dev,5391,row1797 +1798,dev,5394,row1798 +1799,dev,5397,row1799 +1800,dev,5400,row1800 +1801,dev,5403,row1801 +1802,dev,5406,row1802 +1803,dev,5409,row1803 +1804,dev,5412,row1804 +1805,dev,5415,row1805 +1806,dev,5418,row1806 +1807,dev,5421,row1807 +1808,dev,5424,row1808 +1809,dev,5427,row1809 +1810,dev,5430,row1810 +1811,dev,5433,row1811 +1812,dev,5436,row1812 +1813,dev,5439,row1813 +1814,dev,5442,row1814 +1815,dev,5445,row1815 +1816,dev,5448,row1816 +1817,dev,5451,row1817 +1818,dev,5454,row1818 +1819,dev,5457,row1819 +1820,dev,5460,row1820 +1821,dev,5463,row1821 +1822,dev,5466,row1822 +1823,dev,5469,row1823 +1824,dev,5472,row1824 +1825,dev,5475,row1825 +1826,dev,5478,row1826 +1827,dev,5481,row1827 +1828,dev,5484,row1828 +1829,dev,5487,row1829 +1830,dev,5490,row1830 +1831,dev,5493,row1831 +1832,dev,5496,row1832 +1833,dev,5499,row1833 +1834,dev,5502,row1834 +1835,dev,5505,row1835 +1836,dev,5508,row1836 +1837,dev,5511,row1837 +1838,dev,5514,row1838 +1839,dev,5517,row1839 +1840,dev,5520,row1840 +1841,dev,5523,row1841 +1842,dev,5526,row1842 +1843,dev,5529,row1843 +1844,dev,5532,row1844 +1845,dev,5535,row1845 +1846,dev,5538,row1846 +1847,dev,5541,row1847 +1848,dev,5544,row1848 +1849,dev,5547,row1849 +1850,dev,5550,row1850 +1851,dev,5553,row1851 +1852,dev,5556,row1852 +1853,dev,5559,row1853 +1854,dev,5562,row1854 +1855,dev,5565,row1855 +1856,dev,5568,row1856 +1857,dev,5571,row1857 +1858,dev,5574,row1858 +1859,dev,5577,row1859 +1860,dev,5580,row1860 +1861,dev,5583,row1861 +1862,dev,5586,row1862 +1863,dev,5589,row1863 +1864,dev,5592,row1864 +1865,dev,5595,row1865 +1866,dev,5598,row1866 +1867,dev,5601,row1867 +1868,dev,5604,row1868 +1869,dev,5607,row1869 +1870,dev,5610,row1870 +1871,dev,5613,row1871 +1872,dev,5616,row1872 +1873,dev,5619,row1873 +1874,dev,5622,row1874 +1875,dev,5625,row1875 +1876,dev,5628,row1876 +1877,dev,5631,row1877 +1878,dev,5634,row1878 +1879,dev,5637,row1879 +1880,dev,5640,row1880 +1881,dev,5643,row1881 +1882,dev,5646,row1882 +1883,dev,5649,row1883 +1884,dev,5652,row1884 +1885,dev,5655,row1885 +1886,dev,5658,row1886 +1887,dev,5661,row1887 +1888,dev,5664,row1888 +1889,dev,5667,row1889 +1890,dev,5670,row1890 +1891,dev,5673,row1891 +1892,dev,5676,row1892 +1893,dev,5679,row1893 +1894,dev,5682,row1894 +1895,dev,5685,row1895 +1896,dev,5688,row1896 +1897,dev,5691,row1897 +1898,dev,5694,row1898 +1899,dev,5697,row1899 +1900,dev,5700,row1900 +1901,dev,5703,row1901 +1902,dev,5706,row1902 +1903,dev,5709,row1903 +1904,dev,5712,row1904 +1905,dev,5715,row1905 +1906,dev,5718,row1906 +1907,dev,5721,row1907 +1908,dev,5724,row1908 +1909,dev,5727,row1909 +1910,dev,5730,row1910 +1911,dev,5733,row1911 +1912,dev,5736,row1912 +1913,dev,5739,row1913 +1914,dev,5742,row1914 +1915,dev,5745,row1915 +1916,dev,5748,row1916 +1917,dev,5751,row1917 +1918,dev,5754,row1918 +1919,dev,5757,row1919 +1920,dev,5760,row1920 +1921,dev,5763,row1921 +1922,dev,5766,row1922 +1923,dev,5769,row1923 +1924,dev,5772,row1924 +1925,dev,5775,row1925 +1926,dev,5778,row1926 +1927,dev,5781,row1927 +1928,dev,5784,row1928 +1929,dev,5787,row1929 +1930,dev,5790,row1930 +1931,dev,5793,row1931 +1932,dev,5796,row1932 +1933,dev,5799,row1933 +1934,dev,5802,row1934 +1935,dev,5805,row1935 +1936,dev,5808,row1936 +1937,dev,5811,row1937 +1938,dev,5814,row1938 +1939,dev,5817,row1939 +1940,dev,5820,row1940 +1941,dev,5823,row1941 +1942,dev,5826,row1942 +1943,dev,5829,row1943 +1944,dev,5832,row1944 +1945,dev,5835,row1945 +1946,dev,5838,row1946 +1947,dev,5841,row1947 +1948,dev,5844,row1948 +1949,dev,5847,row1949 +1950,dev,5850,row1950 +1951,dev,5853,row1951 +1952,dev,5856,row1952 +1953,dev,5859,row1953 +1954,dev,5862,row1954 +1955,dev,5865,row1955 +1956,dev,5868,row1956 +1957,dev,5871,row1957 +1958,dev,5874,row1958 +1959,dev,5877,row1959 +1960,dev,5880,row1960 +1961,dev,5883,row1961 +1962,dev,5886,row1962 +1963,dev,5889,row1963 +1964,dev,5892,row1964 +1965,dev,5895,row1965 +1966,dev,5898,row1966 +1967,dev,5901,row1967 +1968,dev,5904,row1968 +1969,dev,5907,row1969 +1970,dev,5910,row1970 +1971,dev,5913,row1971 +1972,dev,5916,row1972 +1973,dev,5919,row1973 +1974,dev,5922,row1974 +1975,dev,5925,row1975 +1976,dev,5928,row1976 +1977,dev,5931,row1977 +1978,dev,5934,row1978 +1979,dev,5937,row1979 +1980,dev,5940,row1980 +1981,dev,5943,row1981 +1982,dev,5946,row1982 +1983,dev,5949,row1983 +1984,dev,5952,row1984 +1985,dev,5955,row1985 +1986,dev,5958,row1986 +1987,dev,5961,row1987 +1988,dev,5964,row1988 +1989,dev,5967,row1989 +1990,dev,5970,row1990 +1991,dev,5973,row1991 +1992,dev,5976,row1992 +1993,dev,5979,row1993 +1994,dev,5982,row1994 +1995,dev,5985,row1995 +1996,dev,5988,row1996 +1997,dev,5991,row1997 +1998,dev,5994,row1998 +1999,dev,5997,row1999 +2000,dev,6000,row2000 +2001,dev,6003,row2001 +2002,dev,6006,row2002 +2003,dev,6009,row2003 +2004,dev,6012,row2004 +2005,dev,6015,row2005 +2006,dev,6018,row2006 +2007,dev,6021,row2007 +2008,dev,6024,row2008 +2009,dev,6027,row2009 +2010,dev,6030,row2010 +2011,dev,6033,row2011 +2012,dev,6036,row2012 +2013,dev,6039,row2013 +2014,dev,6042,row2014 +2015,dev,6045,row2015 +2016,dev,6048,row2016 +2017,dev,6051,row2017 +2018,dev,6054,row2018 +2019,dev,6057,row2019 +2020,dev,6060,row2020 +2021,dev,6063,row2021 +2022,dev,6066,row2022 +2023,dev,6069,row2023 +2024,dev,6072,row2024 +2025,dev,6075,row2025 +2026,dev,6078,row2026 +2027,dev,6081,row2027 +2028,dev,6084,row2028 +2029,dev,6087,row2029 +2030,dev,6090,row2030 +2031,dev,6093,row2031 +2032,dev,6096,row2032 +2033,dev,6099,row2033 +2034,dev,6102,row2034 +2035,dev,6105,row2035 +2036,dev,6108,row2036 +2037,dev,6111,row2037 +2038,dev,6114,row2038 +2039,dev,6117,row2039 +2040,dev,6120,row2040 +2041,dev,6123,row2041 +2042,dev,6126,row2042 +2043,dev,6129,row2043 +2044,dev,6132,row2044 +2045,dev,6135,row2045 +2046,dev,6138,row2046 +2047,dev,6141,row2047 +2048,dev,6144,row2048 +2049,dev,6147,row2049 +2050,dev,6150,row2050 +2051,dev,6153,row2051 +2052,dev,6156,row2052 +2053,dev,6159,row2053 +2054,dev,6162,row2054 +2055,dev,6165,row2055 +2056,dev,6168,row2056 +2057,dev,6171,row2057 +2058,dev,6174,row2058 +2059,dev,6177,row2059 +2060,dev,6180,row2060 +2061,dev,6183,row2061 +2062,dev,6186,row2062 +2063,dev,6189,row2063 +2064,dev,6192,row2064 +2065,dev,6195,row2065 +2066,dev,6198,row2066 +2067,dev,6201,row2067 +2068,dev,6204,row2068 +2069,dev,6207,row2069 +2070,dev,6210,row2070 +2071,dev,6213,row2071 +2072,dev,6216,row2072 +2073,dev,6219,row2073 +2074,dev,6222,row2074 +2075,dev,6225,row2075 +2076,dev,6228,row2076 +2077,dev,6231,row2077 +2078,dev,6234,row2078 +2079,dev,6237,row2079 +2080,dev,6240,row2080 +2081,dev,6243,row2081 +2082,dev,6246,row2082 +2083,dev,6249,row2083 +2084,dev,6252,row2084 +2085,dev,6255,row2085 +2086,dev,6258,row2086 +2087,dev,6261,row2087 +2088,dev,6264,row2088 +2089,dev,6267,row2089 +2090,dev,6270,row2090 +2091,dev,6273,row2091 +2092,dev,6276,row2092 +2093,dev,6279,row2093 +2094,dev,6282,row2094 +2095,dev,6285,row2095 +2096,dev,6288,row2096 +2097,dev,6291,row2097 +2098,dev,6294,row2098 +2099,dev,6297,row2099 +2100,dev,6300,row2100 +2101,dev,6303,row2101 +2102,dev,6306,row2102 +2103,dev,6309,row2103 +2104,dev,6312,row2104 +2105,dev,6315,row2105 +2106,dev,6318,row2106 +2107,dev,6321,row2107 +2108,dev,6324,row2108 +2109,dev,6327,row2109 +2110,dev,6330,row2110 +2111,dev,6333,row2111 +2112,dev,6336,row2112 +2113,dev,6339,row2113 +2114,dev,6342,row2114 +2115,dev,6345,row2115 +2116,dev,6348,row2116 +2117,dev,6351,row2117 +2118,dev,6354,row2118 +2119,dev,6357,row2119 +2120,dev,6360,row2120 +2121,dev,6363,row2121 +2122,dev,6366,row2122 +2123,dev,6369,row2123 +2124,dev,6372,row2124 +2125,dev,6375,row2125 +2126,dev,6378,row2126 +2127,dev,6381,row2127 +2128,dev,6384,row2128 +2129,dev,6387,row2129 +2130,dev,6390,row2130 +2131,dev,6393,row2131 +2132,dev,6396,row2132 +2133,dev,6399,row2133 +2134,dev,6402,row2134 +2135,dev,6405,row2135 +2136,dev,6408,row2136 +2137,dev,6411,row2137 +2138,dev,6414,row2138 +2139,dev,6417,row2139 +2140,dev,6420,row2140 +2141,dev,6423,row2141 +2142,dev,6426,row2142 +2143,dev,6429,row2143 +2144,dev,6432,row2144 +2145,dev,6435,row2145 +2146,dev,6438,row2146 +2147,dev,6441,row2147 +2148,dev,6444,row2148 +2149,dev,6447,row2149 +2150,dev,6450,row2150 +2151,dev,6453,row2151 +2152,dev,6456,row2152 +2153,dev,6459,row2153 +2154,dev,6462,row2154 +2155,dev,6465,row2155 +2156,dev,6468,row2156 +2157,dev,6471,row2157 +2158,dev,6474,row2158 +2159,dev,6477,row2159 +2160,dev,6480,row2160 +2161,dev,6483,row2161 +2162,dev,6486,row2162 +2163,dev,6489,row2163 +2164,dev,6492,row2164 +2165,dev,6495,row2165 +2166,dev,6498,row2166 +2167,dev,6501,row2167 +2168,dev,6504,row2168 +2169,dev,6507,row2169 +2170,dev,6510,row2170 +2171,dev,6513,row2171 +2172,dev,6516,row2172 +2173,dev,6519,row2173 +2174,dev,6522,row2174 +2175,dev,6525,row2175 +2176,dev,6528,row2176 +2177,dev,6531,row2177 +2178,dev,6534,row2178 +2179,dev,6537,row2179 +2180,dev,6540,row2180 +2181,dev,6543,row2181 +2182,dev,6546,row2182 +2183,dev,6549,row2183 +2184,dev,6552,row2184 +2185,dev,6555,row2185 +2186,dev,6558,row2186 +2187,dev,6561,row2187 +2188,dev,6564,row2188 +2189,dev,6567,row2189 +2190,dev,6570,row2190 +2191,dev,6573,row2191 +2192,dev,6576,row2192 +2193,dev,6579,row2193 +2194,dev,6582,row2194 +2195,dev,6585,row2195 +2196,dev,6588,row2196 +2197,dev,6591,row2197 +2198,dev,6594,row2198 +2199,dev,6597,row2199 +2200,dev,6600,row2200 +2201,dev,6603,row2201 +2202,dev,6606,row2202 +2203,dev,6609,row2203 +2204,dev,6612,row2204 +2205,dev,6615,row2205 +2206,dev,6618,row2206 +2207,dev,6621,row2207 +2208,dev,6624,row2208 +2209,dev,6627,row2209 +2210,dev,6630,row2210 +2211,dev,6633,row2211 +2212,dev,6636,row2212 +2213,dev,6639,row2213 +2214,dev,6642,row2214 +2215,dev,6645,row2215 +2216,dev,6648,row2216 +2217,dev,6651,row2217 +2218,dev,6654,row2218 +2219,dev,6657,row2219 +2220,dev,6660,row2220 +2221,dev,6663,row2221 +2222,dev,6666,row2222 +2223,dev,6669,row2223 +2224,dev,6672,row2224 +2225,dev,6675,row2225 +2226,dev,6678,row2226 +2227,dev,6681,row2227 +2228,dev,6684,row2228 +2229,dev,6687,row2229 +2230,dev,6690,row2230 +2231,dev,6693,row2231 +2232,dev,6696,row2232 +2233,dev,6699,row2233 +2234,dev,6702,row2234 +2235,dev,6705,row2235 +2236,dev,6708,row2236 +2237,dev,6711,row2237 +2238,dev,6714,row2238 +2239,dev,6717,row2239 +2240,dev,6720,row2240 +2241,dev,6723,row2241 +2242,dev,6726,row2242 +2243,dev,6729,row2243 +2244,dev,6732,row2244 +2245,dev,6735,row2245 +2246,dev,6738,row2246 +2247,dev,6741,row2247 +2248,dev,6744,row2248 +2249,dev,6747,row2249 +2250,dev,6750,row2250 +2251,dev,6753,row2251 +2252,dev,6756,row2252 +2253,dev,6759,row2253 +2254,dev,6762,row2254 +2255,dev,6765,row2255 +2256,dev,6768,row2256 +2257,dev,6771,row2257 +2258,dev,6774,row2258 +2259,dev,6777,row2259 +2260,dev,6780,row2260 +2261,dev,6783,row2261 +2262,dev,6786,row2262 +2263,dev,6789,row2263 +2264,dev,6792,row2264 +2265,dev,6795,row2265 +2266,dev,6798,row2266 +2267,dev,6801,row2267 +2268,dev,6804,row2268 +2269,dev,6807,row2269 +2270,dev,6810,row2270 +2271,dev,6813,row2271 +2272,dev,6816,row2272 +2273,dev,6819,row2273 +2274,dev,6822,row2274 +2275,dev,6825,row2275 +2276,dev,6828,row2276 +2277,dev,6831,row2277 +2278,dev,6834,row2278 +2279,dev,6837,row2279 +2280,dev,6840,row2280 +2281,dev,6843,row2281 +2282,dev,6846,row2282 +2283,dev,6849,row2283 +2284,dev,6852,row2284 +2285,dev,6855,row2285 +2286,dev,6858,row2286 +2287,dev,6861,row2287 +2288,dev,6864,row2288 +2289,dev,6867,row2289 +2290,dev,6870,row2290 +2291,dev,6873,row2291 +2292,dev,6876,row2292 +2293,dev,6879,row2293 +2294,dev,6882,row2294 +2295,dev,6885,row2295 +2296,dev,6888,row2296 +2297,dev,6891,row2297 +2298,dev,6894,row2298 +2299,dev,6897,row2299 +2300,dev,6900,row2300 +2301,dev,6903,row2301 +2302,dev,6906,row2302 +2303,dev,6909,row2303 +2304,dev,6912,row2304 +2305,dev,6915,row2305 +2306,dev,6918,row2306 +2307,dev,6921,row2307 +2308,dev,6924,row2308 +2309,dev,6927,row2309 +2310,dev,6930,row2310 +2311,dev,6933,row2311 +2312,dev,6936,row2312 +2313,dev,6939,row2313 +2314,dev,6942,row2314 +2315,dev,6945,row2315 +2316,dev,6948,row2316 +2317,dev,6951,row2317 +2318,dev,6954,row2318 +2319,dev,6957,row2319 +2320,dev,6960,row2320 +2321,dev,6963,row2321 +2322,dev,6966,row2322 +2323,dev,6969,row2323 +2324,dev,6972,row2324 +2325,dev,6975,row2325 +2326,dev,6978,row2326 +2327,dev,6981,row2327 +2328,dev,6984,row2328 +2329,dev,6987,row2329 +2330,dev,6990,row2330 +2331,dev,6993,row2331 +2332,dev,6996,row2332 +2333,dev,6999,row2333 +2334,dev,7002,row2334 +2335,dev,7005,row2335 +2336,dev,7008,row2336 +2337,dev,7011,row2337 +2338,dev,7014,row2338 +2339,dev,7017,row2339 +2340,dev,7020,row2340 +2341,dev,7023,row2341 +2342,dev,7026,row2342 +2343,dev,7029,row2343 +2344,dev,7032,row2344 +2345,dev,7035,row2345 +2346,dev,7038,row2346 +2347,dev,7041,row2347 +2348,dev,7044,row2348 +2349,dev,7047,row2349 +2350,dev,7050,row2350 +2351,dev,7053,row2351 +2352,dev,7056,row2352 +2353,dev,7059,row2353 +2354,dev,7062,row2354 +2355,dev,7065,row2355 +2356,dev,7068,row2356 +2357,dev,7071,row2357 +2358,dev,7074,row2358 +2359,dev,7077,row2359 +2360,dev,7080,row2360 +2361,dev,7083,row2361 +2362,dev,7086,row2362 +2363,dev,7089,row2363 +2364,dev,7092,row2364 +2365,dev,7095,row2365 +2366,dev,7098,row2366 +2367,dev,7101,row2367 +2368,dev,7104,row2368 +2369,dev,7107,row2369 +2370,dev,7110,row2370 +2371,dev,7113,row2371 +2372,dev,7116,row2372 +2373,dev,7119,row2373 +2374,dev,7122,row2374 +2375,dev,7125,row2375 +2376,dev,7128,row2376 +2377,dev,7131,row2377 +2378,dev,7134,row2378 +2379,dev,7137,row2379 +2380,dev,7140,row2380 +2381,dev,7143,row2381 +2382,dev,7146,row2382 +2383,dev,7149,row2383 +2384,dev,7152,row2384 +2385,dev,7155,row2385 +2386,dev,7158,row2386 +2387,dev,7161,row2387 +2388,dev,7164,row2388 +2389,dev,7167,row2389 +2390,dev,7170,row2390 +2391,dev,7173,row2391 +2392,dev,7176,row2392 +2393,dev,7179,row2393 +2394,dev,7182,row2394 +2395,dev,7185,row2395 +2396,dev,7188,row2396 +2397,dev,7191,row2397 +2398,dev,7194,row2398 +2399,dev,7197,row2399 +2400,dev,7200,row2400 +2401,dev,7203,row2401 +2402,dev,7206,row2402 +2403,dev,7209,row2403 +2404,dev,7212,row2404 +2405,dev,7215,row2405 +2406,dev,7218,row2406 +2407,dev,7221,row2407 +2408,dev,7224,row2408 +2409,dev,7227,row2409 +2410,dev,7230,row2410 +2411,dev,7233,row2411 +2412,dev,7236,row2412 +2413,dev,7239,row2413 +2414,dev,7242,row2414 +2415,dev,7245,row2415 +2416,dev,7248,row2416 +2417,dev,7251,row2417 +2418,dev,7254,row2418 +2419,dev,7257,row2419 +2420,dev,7260,row2420 +2421,dev,7263,row2421 +2422,dev,7266,row2422 +2423,dev,7269,row2423 +2424,dev,7272,row2424 +2425,dev,7275,row2425 +2426,dev,7278,row2426 +2427,dev,7281,row2427 +2428,dev,7284,row2428 +2429,dev,7287,row2429 +2430,dev,7290,row2430 +2431,dev,7293,row2431 +2432,dev,7296,row2432 +2433,dev,7299,row2433 +2434,dev,7302,row2434 +2435,dev,7305,row2435 +2436,dev,7308,row2436 +2437,dev,7311,row2437 +2438,dev,7314,row2438 +2439,dev,7317,row2439 +2440,dev,7320,row2440 +2441,dev,7323,row2441 +2442,dev,7326,row2442 +2443,dev,7329,row2443 +2444,dev,7332,row2444 +2445,dev,7335,row2445 +2446,dev,7338,row2446 +2447,dev,7341,row2447 +2448,dev,7344,row2448 +2449,dev,7347,row2449 +2450,dev,7350,row2450 +2451,dev,7353,row2451 +2452,dev,7356,row2452 +2453,dev,7359,row2453 +2454,dev,7362,row2454 +2455,dev,7365,row2455 +2456,dev,7368,row2456 +2457,dev,7371,row2457 +2458,dev,7374,row2458 +2459,dev,7377,row2459 +2460,dev,7380,row2460 +2461,dev,7383,row2461 +2462,dev,7386,row2462 +2463,dev,7389,row2463 +2464,dev,7392,row2464 +2465,dev,7395,row2465 +2466,dev,7398,row2466 +2467,dev,7401,row2467 +2468,dev,7404,row2468 +2469,dev,7407,row2469 +2470,dev,7410,row2470 +2471,dev,7413,row2471 +2472,dev,7416,row2472 +2473,dev,7419,row2473 +2474,dev,7422,row2474 +2475,dev,7425,row2475 +2476,dev,7428,row2476 +2477,dev,7431,row2477 +2478,dev,7434,row2478 +2479,dev,7437,row2479 +2480,dev,7440,row2480 +2481,dev,7443,row2481 +2482,dev,7446,row2482 +2483,dev,7449,row2483 +2484,dev,7452,row2484 +2485,dev,7455,row2485 +2486,dev,7458,row2486 +2487,dev,7461,row2487 +2488,dev,7464,row2488 +2489,dev,7467,row2489 +2490,dev,7470,row2490 +2491,dev,7473,row2491 +2492,dev,7476,row2492 +2493,dev,7479,row2493 +2494,dev,7482,row2494 +2495,dev,7485,row2495 +2496,dev,7488,row2496 +2497,dev,7491,row2497 +2498,dev,7494,row2498 +2499,dev,7497,row2499 diff --git a/cpp/test/tools/e2e/fixtures/recorded/a3888eac21f087b1.tsfile b/cpp/test/tools/e2e/fixtures/recorded/a3888eac21f087b1.tsfile new file mode 100644 index 000000000..3a9b06ae5 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/a3888eac21f087b1.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/a520e2dad89980a5.tsfile b/cpp/test/tools/e2e/fixtures/recorded/a520e2dad89980a5.tsfile new file mode 100644 index 000000000..9e88ca06a Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/a520e2dad89980a5.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/a7e15add9795acb0.tsfile b/cpp/test/tools/e2e/fixtures/recorded/a7e15add9795acb0.tsfile new file mode 100644 index 000000000..45b914f78 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/a7e15add9795acb0.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/ab6e968534a7e087.csv b/cpp/test/tools/e2e/fixtures/recorded/ab6e968534a7e087.csv new file mode 100644 index 000000000..60c3a30e7 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/ab6e968534a7e087.csv @@ -0,0 +1,3 @@ +temp,time,site +21.5,1000,beijing +22.0,2000,shanghai diff --git a/cpp/test/tools/e2e/fixtures/recorded/acd5b9243a38e4f8.tsfile b/cpp/test/tools/e2e/fixtures/recorded/acd5b9243a38e4f8.tsfile new file mode 100644 index 000000000..864f7d908 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/acd5b9243a38e4f8.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/b32ffaa9b5e49e11.csv b/cpp/test/tools/e2e/fixtures/recorded/b32ffaa9b5e49e11.csv new file mode 100644 index 000000000..3ddcaf6cb --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/b32ffaa9b5e49e11.csv @@ -0,0 +1,2 @@ +time,site +0,beijing diff --git a/cpp/test/tools/e2e/fixtures/recorded/b6251665e053a224.tsfile b/cpp/test/tools/e2e/fixtures/recorded/b6251665e053a224.tsfile new file mode 100644 index 000000000..d68676cd8 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/b6251665e053a224.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/b7aa5a377f9d473e.csv b/cpp/test/tools/e2e/fixtures/recorded/b7aa5a377f9d473e.csv new file mode 100644 index 000000000..0c79f74ad --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/b7aa5a377f9d473e.csv @@ -0,0 +1,3 @@ +time,id1,ts1,d1,b1 +0,dev,1700000000000,2024-01-15,hello +1,dev,1700000000001,2024-12-31,world diff --git a/cpp/test/tools/e2e/fixtures/recorded/bac2896165b44e56.csv b/cpp/test/tools/e2e/fixtures/recorded/bac2896165b44e56.csv new file mode 100644 index 000000000..d0446e1a3 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/bac2896165b44e56.csv @@ -0,0 +1,8 @@ +time,site,note +1000,s1,\N +2000,s1,"\N" +3000,s1,\leading +4000,s1,back\slash +5000,s1,"\with,comma" +6000,\site,tag\end +7000,\\site,\\N diff --git a/cpp/test/tools/e2e/fixtures/recorded/be1a2fdc5942bebd.csv b/cpp/test/tools/e2e/fixtures/recorded/be1a2fdc5942bebd.csv new file mode 100644 index 000000000..69cbdd86b --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/be1a2fdc5942bebd.csv @@ -0,0 +1,2 @@ +time,s1 +0,2024-13-40 diff --git a/cpp/test/tools/e2e/fixtures/recorded/c084f0d9b5cc00bc.csv b/cpp/test/tools/e2e/fixtures/recorded/c084f0d9b5cc00bc.csv new file mode 100644 index 000000000..e0febeeca --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/c084f0d9b5cc00bc.csv @@ -0,0 +1,2 @@ +time,s1 +0,1 diff --git a/cpp/test/tools/e2e/fixtures/recorded/c1a66b9d085b4360.tsfile b/cpp/test/tools/e2e/fixtures/recorded/c1a66b9d085b4360.tsfile new file mode 100644 index 000000000..60dddc293 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/c1a66b9d085b4360.tsfile @@ -0,0 +1 @@ +keep-me \ No newline at end of file diff --git a/cpp/test/tools/e2e/fixtures/recorded/c7da5b75d91e3488.csv b/cpp/test/tools/e2e/fixtures/recorded/c7da5b75d91e3488.csv new file mode 100644 index 000000000..81726bf4a --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/c7da5b75d91e3488.csv @@ -0,0 +1,3 @@ +time,id,n +0,dev,\N +1,"",7 diff --git a/cpp/test/tools/e2e/fixtures/recorded/cea175b2e6fa8cdb.tsfile b/cpp/test/tools/e2e/fixtures/recorded/cea175b2e6fa8cdb.tsfile new file mode 100644 index 000000000..d3193f33e Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/cea175b2e6fa8cdb.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/cebca58ed56e0aab.tsfile b/cpp/test/tools/e2e/fixtures/recorded/cebca58ed56e0aab.tsfile new file mode 100644 index 000000000..8ab72f698 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/cebca58ed56e0aab.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/d083ba5c0e6a1b67.csv b/cpp/test/tools/e2e/fixtures/recorded/d083ba5c0e6a1b67.csv new file mode 100644 index 000000000..087aecb27 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/d083ba5c0e6a1b67.csv @@ -0,0 +1,3 @@ +time,id1,s1 +0,dev,0 +1,dev,10 diff --git a/cpp/test/tools/e2e/fixtures/recorded/d7b0a040cecabf8d.tsfile b/cpp/test/tools/e2e/fixtures/recorded/d7b0a040cecabf8d.tsfile new file mode 100644 index 000000000..b6b17a29e Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/d7b0a040cecabf8d.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/d7b49e2bdcff8bb2.tsfile b/cpp/test/tools/e2e/fixtures/recorded/d7b49e2bdcff8bb2.tsfile new file mode 100644 index 000000000..33609b39e Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/d7b49e2bdcff8bb2.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/d97187a52ca24996.csv b/cpp/test/tools/e2e/fixtures/recorded/d97187a52ca24996.csv new file mode 100644 index 000000000..777e4ef5f --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/d97187a52ca24996.csv @@ -0,0 +1,2 @@ +time,site,temp,status +0,dev,1,ok diff --git a/cpp/test/tools/e2e/fixtures/recorded/dc7368474f850fc0.csv b/cpp/test/tools/e2e/fixtures/recorded/dc7368474f850fc0.csv new file mode 100644 index 000000000..bc39f1043 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/dc7368474f850fc0.csv @@ -0,0 +1,17 @@ +time,site,message,note +0,"s +1","first +second","""quoted"" + +last" +1,"s +1","lf +only","mixed +and +more" +2,"s +1","carriage return"," +" +3,"s +1","ends ","line +end" diff --git a/cpp/test/tools/e2e/fixtures/recorded/de21dc67151aafff.csv b/cpp/test/tools/e2e/fixtures/recorded/de21dc67151aafff.csv new file mode 100644 index 000000000..a6fe14244 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/de21dc67151aafff.csv @@ -0,0 +1,3001 @@ +time,s1 +1,2 +2,4 +3,6 +4,8 +5,10 +6,12 +7,14 +8,16 +9,18 +10,20 +11,22 +12,24 +13,26 +14,28 +15,30 +16,32 +17,34 +18,36 +19,38 +20,40 +21,42 +22,44 +23,46 +24,48 +25,50 +26,52 +27,54 +28,56 +29,58 +30,60 +31,62 +32,64 +33,66 +34,68 +35,70 +36,72 +37,74 +38,76 +39,78 +40,80 +41,82 +42,84 +43,86 +44,88 +45,90 +46,92 +47,94 +48,96 +49,98 +50,100 +51,102 +52,104 +53,106 +54,108 +55,110 +56,112 +57,114 +58,116 +59,118 +60,120 +61,122 +62,124 +63,126 +64,128 +65,130 +66,132 +67,134 +68,136 +69,138 +70,140 +71,142 +72,144 +73,146 +74,148 +75,150 +76,152 +77,154 +78,156 +79,158 +80,160 +81,162 +82,164 +83,166 +84,168 +85,170 +86,172 +87,174 +88,176 +89,178 +90,180 +91,182 +92,184 +93,186 +94,188 +95,190 +96,192 +97,194 +98,196 +99,198 +100,200 +101,202 +102,204 +103,206 +104,208 +105,210 +106,212 +107,214 +108,216 +109,218 +110,220 +111,222 +112,224 +113,226 +114,228 +115,230 +116,232 +117,234 +118,236 +119,238 +120,240 +121,242 +122,244 +123,246 +124,248 +125,250 +126,252 +127,254 +128,256 +129,258 +130,260 +131,262 +132,264 +133,266 +134,268 +135,270 +136,272 +137,274 +138,276 +139,278 +140,280 +141,282 +142,284 +143,286 +144,288 +145,290 +146,292 +147,294 +148,296 +149,298 +150,300 +151,302 +152,304 +153,306 +154,308 +155,310 +156,312 +157,314 +158,316 +159,318 +160,320 +161,322 +162,324 +163,326 +164,328 +165,330 +166,332 +167,334 +168,336 +169,338 +170,340 +171,342 +172,344 +173,346 +174,348 +175,350 +176,352 +177,354 +178,356 +179,358 +180,360 +181,362 +182,364 +183,366 +184,368 +185,370 +186,372 +187,374 +188,376 +189,378 +190,380 +191,382 +192,384 +193,386 +194,388 +195,390 +196,392 +197,394 +198,396 +199,398 +200,400 +201,402 +202,404 +203,406 +204,408 +205,410 +206,412 +207,414 +208,416 +209,418 +210,420 +211,422 +212,424 +213,426 +214,428 +215,430 +216,432 +217,434 +218,436 +219,438 +220,440 +221,442 +222,444 +223,446 +224,448 +225,450 +226,452 +227,454 +228,456 +229,458 +230,460 +231,462 +232,464 +233,466 +234,468 +235,470 +236,472 +237,474 +238,476 +239,478 +240,480 +241,482 +242,484 +243,486 +244,488 +245,490 +246,492 +247,494 +248,496 +249,498 +250,500 +251,502 +252,504 +253,506 +254,508 +255,510 +256,512 +257,514 +258,516 +259,518 +260,520 +261,522 +262,524 +263,526 +264,528 +265,530 +266,532 +267,534 +268,536 +269,538 +270,540 +271,542 +272,544 +273,546 +274,548 +275,550 +276,552 +277,554 +278,556 +279,558 +280,560 +281,562 +282,564 +283,566 +284,568 +285,570 +286,572 +287,574 +288,576 +289,578 +290,580 +291,582 +292,584 +293,586 +294,588 +295,590 +296,592 +297,594 +298,596 +299,598 +300,600 +301,602 +302,604 +303,606 +304,608 +305,610 +306,612 +307,614 +308,616 +309,618 +310,620 +311,622 +312,624 +313,626 +314,628 +315,630 +316,632 +317,634 +318,636 +319,638 +320,640 +321,642 +322,644 +323,646 +324,648 +325,650 +326,652 +327,654 +328,656 +329,658 +330,660 +331,662 +332,664 +333,666 +334,668 +335,670 +336,672 +337,674 +338,676 +339,678 +340,680 +341,682 +342,684 +343,686 +344,688 +345,690 +346,692 +347,694 +348,696 +349,698 +350,700 +351,702 +352,704 +353,706 +354,708 +355,710 +356,712 +357,714 +358,716 +359,718 +360,720 +361,722 +362,724 +363,726 +364,728 +365,730 +366,732 +367,734 +368,736 +369,738 +370,740 +371,742 +372,744 +373,746 +374,748 +375,750 +376,752 +377,754 +378,756 +379,758 +380,760 +381,762 +382,764 +383,766 +384,768 +385,770 +386,772 +387,774 +388,776 +389,778 +390,780 +391,782 +392,784 +393,786 +394,788 +395,790 +396,792 +397,794 +398,796 +399,798 +400,800 +401,802 +402,804 +403,806 +404,808 +405,810 +406,812 +407,814 +408,816 +409,818 +410,820 +411,822 +412,824 +413,826 +414,828 +415,830 +416,832 +417,834 +418,836 +419,838 +420,840 +421,842 +422,844 +423,846 +424,848 +425,850 +426,852 +427,854 +428,856 +429,858 +430,860 +431,862 +432,864 +433,866 +434,868 +435,870 +436,872 +437,874 +438,876 +439,878 +440,880 +441,882 +442,884 +443,886 +444,888 +445,890 +446,892 +447,894 +448,896 +449,898 +450,900 +451,902 +452,904 +453,906 +454,908 +455,910 +456,912 +457,914 +458,916 +459,918 +460,920 +461,922 +462,924 +463,926 +464,928 +465,930 +466,932 +467,934 +468,936 +469,938 +470,940 +471,942 +472,944 +473,946 +474,948 +475,950 +476,952 +477,954 +478,956 +479,958 +480,960 +481,962 +482,964 +483,966 +484,968 +485,970 +486,972 +487,974 +488,976 +489,978 +490,980 +491,982 +492,984 +493,986 +494,988 +495,990 +496,992 +497,994 +498,996 +499,998 +500,1000 +501,1002 +502,1004 +503,1006 +504,1008 +505,1010 +506,1012 +507,1014 +508,1016 +509,1018 +510,1020 +511,1022 +512,1024 +513,1026 +514,1028 +515,1030 +516,1032 +517,1034 +518,1036 +519,1038 +520,1040 +521,1042 +522,1044 +523,1046 +524,1048 +525,1050 +526,1052 +527,1054 +528,1056 +529,1058 +530,1060 +531,1062 +532,1064 +533,1066 +534,1068 +535,1070 +536,1072 +537,1074 +538,1076 +539,1078 +540,1080 +541,1082 +542,1084 +543,1086 +544,1088 +545,1090 +546,1092 +547,1094 +548,1096 +549,1098 +550,1100 +551,1102 +552,1104 +553,1106 +554,1108 +555,1110 +556,1112 +557,1114 +558,1116 +559,1118 +560,1120 +561,1122 +562,1124 +563,1126 +564,1128 +565,1130 +566,1132 +567,1134 +568,1136 +569,1138 +570,1140 +571,1142 +572,1144 +573,1146 +574,1148 +575,1150 +576,1152 +577,1154 +578,1156 +579,1158 +580,1160 +581,1162 +582,1164 +583,1166 +584,1168 +585,1170 +586,1172 +587,1174 +588,1176 +589,1178 +590,1180 +591,1182 +592,1184 +593,1186 +594,1188 +595,1190 +596,1192 +597,1194 +598,1196 +599,1198 +600,1200 +601,1202 +602,1204 +603,1206 +604,1208 +605,1210 +606,1212 +607,1214 +608,1216 +609,1218 +610,1220 +611,1222 +612,1224 +613,1226 +614,1228 +615,1230 +616,1232 +617,1234 +618,1236 +619,1238 +620,1240 +621,1242 +622,1244 +623,1246 +624,1248 +625,1250 +626,1252 +627,1254 +628,1256 +629,1258 +630,1260 +631,1262 +632,1264 +633,1266 +634,1268 +635,1270 +636,1272 +637,1274 +638,1276 +639,1278 +640,1280 +641,1282 +642,1284 +643,1286 +644,1288 +645,1290 +646,1292 +647,1294 +648,1296 +649,1298 +650,1300 +651,1302 +652,1304 +653,1306 +654,1308 +655,1310 +656,1312 +657,1314 +658,1316 +659,1318 +660,1320 +661,1322 +662,1324 +663,1326 +664,1328 +665,1330 +666,1332 +667,1334 +668,1336 +669,1338 +670,1340 +671,1342 +672,1344 +673,1346 +674,1348 +675,1350 +676,1352 +677,1354 +678,1356 +679,1358 +680,1360 +681,1362 +682,1364 +683,1366 +684,1368 +685,1370 +686,1372 +687,1374 +688,1376 +689,1378 +690,1380 +691,1382 +692,1384 +693,1386 +694,1388 +695,1390 +696,1392 +697,1394 +698,1396 +699,1398 +700,1400 +701,1402 +702,1404 +703,1406 +704,1408 +705,1410 +706,1412 +707,1414 +708,1416 +709,1418 +710,1420 +711,1422 +712,1424 +713,1426 +714,1428 +715,1430 +716,1432 +717,1434 +718,1436 +719,1438 +720,1440 +721,1442 +722,1444 +723,1446 +724,1448 +725,1450 +726,1452 +727,1454 +728,1456 +729,1458 +730,1460 +731,1462 +732,1464 +733,1466 +734,1468 +735,1470 +736,1472 +737,1474 +738,1476 +739,1478 +740,1480 +741,1482 +742,1484 +743,1486 +744,1488 +745,1490 +746,1492 +747,1494 +748,1496 +749,1498 +750,1500 +751,1502 +752,1504 +753,1506 +754,1508 +755,1510 +756,1512 +757,1514 +758,1516 +759,1518 +760,1520 +761,1522 +762,1524 +763,1526 +764,1528 +765,1530 +766,1532 +767,1534 +768,1536 +769,1538 +770,1540 +771,1542 +772,1544 +773,1546 +774,1548 +775,1550 +776,1552 +777,1554 +778,1556 +779,1558 +780,1560 +781,1562 +782,1564 +783,1566 +784,1568 +785,1570 +786,1572 +787,1574 +788,1576 +789,1578 +790,1580 +791,1582 +792,1584 +793,1586 +794,1588 +795,1590 +796,1592 +797,1594 +798,1596 +799,1598 +800,1600 +801,1602 +802,1604 +803,1606 +804,1608 +805,1610 +806,1612 +807,1614 +808,1616 +809,1618 +810,1620 +811,1622 +812,1624 +813,1626 +814,1628 +815,1630 +816,1632 +817,1634 +818,1636 +819,1638 +820,1640 +821,1642 +822,1644 +823,1646 +824,1648 +825,1650 +826,1652 +827,1654 +828,1656 +829,1658 +830,1660 +831,1662 +832,1664 +833,1666 +834,1668 +835,1670 +836,1672 +837,1674 +838,1676 +839,1678 +840,1680 +841,1682 +842,1684 +843,1686 +844,1688 +845,1690 +846,1692 +847,1694 +848,1696 +849,1698 +850,1700 +851,1702 +852,1704 +853,1706 +854,1708 +855,1710 +856,1712 +857,1714 +858,1716 +859,1718 +860,1720 +861,1722 +862,1724 +863,1726 +864,1728 +865,1730 +866,1732 +867,1734 +868,1736 +869,1738 +870,1740 +871,1742 +872,1744 +873,1746 +874,1748 +875,1750 +876,1752 +877,1754 +878,1756 +879,1758 +880,1760 +881,1762 +882,1764 +883,1766 +884,1768 +885,1770 +886,1772 +887,1774 +888,1776 +889,1778 +890,1780 +891,1782 +892,1784 +893,1786 +894,1788 +895,1790 +896,1792 +897,1794 +898,1796 +899,1798 +900,1800 +901,1802 +902,1804 +903,1806 +904,1808 +905,1810 +906,1812 +907,1814 +908,1816 +909,1818 +910,1820 +911,1822 +912,1824 +913,1826 +914,1828 +915,1830 +916,1832 +917,1834 +918,1836 +919,1838 +920,1840 +921,1842 +922,1844 +923,1846 +924,1848 +925,1850 +926,1852 +927,1854 +928,1856 +929,1858 +930,1860 +931,1862 +932,1864 +933,1866 +934,1868 +935,1870 +936,1872 +937,1874 +938,1876 +939,1878 +940,1880 +941,1882 +942,1884 +943,1886 +944,1888 +945,1890 +946,1892 +947,1894 +948,1896 +949,1898 +950,1900 +951,1902 +952,1904 +953,1906 +954,1908 +955,1910 +956,1912 +957,1914 +958,1916 +959,1918 +960,1920 +961,1922 +962,1924 +963,1926 +964,1928 +965,1930 +966,1932 +967,1934 +968,1936 +969,1938 +970,1940 +971,1942 +972,1944 +973,1946 +974,1948 +975,1950 +976,1952 +977,1954 +978,1956 +979,1958 +980,1960 +981,1962 +982,1964 +983,1966 +984,1968 +985,1970 +986,1972 +987,1974 +988,1976 +989,1978 +990,1980 +991,1982 +992,1984 +993,1986 +994,1988 +995,1990 +996,1992 +997,1994 +998,1996 +999,1998 +1000,2000 +1001,2002 +1002,2004 +1003,2006 +1004,2008 +1005,2010 +1006,2012 +1007,2014 +1008,2016 +1009,2018 +1010,2020 +1011,2022 +1012,2024 +1013,2026 +1014,2028 +1015,2030 +1016,2032 +1017,2034 +1018,2036 +1019,2038 +1020,2040 +1021,2042 +1022,2044 +1023,2046 +1024,2048 +1025,2050 +1026,2052 +1027,2054 +1028,2056 +1029,2058 +1030,2060 +1031,2062 +1032,2064 +1033,2066 +1034,2068 +1035,2070 +1036,2072 +1037,2074 +1038,2076 +1039,2078 +1040,2080 +1041,2082 +1042,2084 +1043,2086 +1044,2088 +1045,2090 +1046,2092 +1047,2094 +1048,2096 +1049,2098 +1050,2100 +1051,2102 +1052,2104 +1053,2106 +1054,2108 +1055,2110 +1056,2112 +1057,2114 +1058,2116 +1059,2118 +1060,2120 +1061,2122 +1062,2124 +1063,2126 +1064,2128 +1065,2130 +1066,2132 +1067,2134 +1068,2136 +1069,2138 +1070,2140 +1071,2142 +1072,2144 +1073,2146 +1074,2148 +1075,2150 +1076,2152 +1077,2154 +1078,2156 +1079,2158 +1080,2160 +1081,2162 +1082,2164 +1083,2166 +1084,2168 +1085,2170 +1086,2172 +1087,2174 +1088,2176 +1089,2178 +1090,2180 +1091,2182 +1092,2184 +1093,2186 +1094,2188 +1095,2190 +1096,2192 +1097,2194 +1098,2196 +1099,2198 +1100,2200 +1101,2202 +1102,2204 +1103,2206 +1104,2208 +1105,2210 +1106,2212 +1107,2214 +1108,2216 +1109,2218 +1110,2220 +1111,2222 +1112,2224 +1113,2226 +1114,2228 +1115,2230 +1116,2232 +1117,2234 +1118,2236 +1119,2238 +1120,2240 +1121,2242 +1122,2244 +1123,2246 +1124,2248 +1125,2250 +1126,2252 +1127,2254 +1128,2256 +1129,2258 +1130,2260 +1131,2262 +1132,2264 +1133,2266 +1134,2268 +1135,2270 +1136,2272 +1137,2274 +1138,2276 +1139,2278 +1140,2280 +1141,2282 +1142,2284 +1143,2286 +1144,2288 +1145,2290 +1146,2292 +1147,2294 +1148,2296 +1149,2298 +1150,2300 +1151,2302 +1152,2304 +1153,2306 +1154,2308 +1155,2310 +1156,2312 +1157,2314 +1158,2316 +1159,2318 +1160,2320 +1161,2322 +1162,2324 +1163,2326 +1164,2328 +1165,2330 +1166,2332 +1167,2334 +1168,2336 +1169,2338 +1170,2340 +1171,2342 +1172,2344 +1173,2346 +1174,2348 +1175,2350 +1176,2352 +1177,2354 +1178,2356 +1179,2358 +1180,2360 +1181,2362 +1182,2364 +1183,2366 +1184,2368 +1185,2370 +1186,2372 +1187,2374 +1188,2376 +1189,2378 +1190,2380 +1191,2382 +1192,2384 +1193,2386 +1194,2388 +1195,2390 +1196,2392 +1197,2394 +1198,2396 +1199,2398 +1200,2400 +1201,2402 +1202,2404 +1203,2406 +1204,2408 +1205,2410 +1206,2412 +1207,2414 +1208,2416 +1209,2418 +1210,2420 +1211,2422 +1212,2424 +1213,2426 +1214,2428 +1215,2430 +1216,2432 +1217,2434 +1218,2436 +1219,2438 +1220,2440 +1221,2442 +1222,2444 +1223,2446 +1224,2448 +1225,2450 +1226,2452 +1227,2454 +1228,2456 +1229,2458 +1230,2460 +1231,2462 +1232,2464 +1233,2466 +1234,2468 +1235,2470 +1236,2472 +1237,2474 +1238,2476 +1239,2478 +1240,2480 +1241,2482 +1242,2484 +1243,2486 +1244,2488 +1245,2490 +1246,2492 +1247,2494 +1248,2496 +1249,2498 +1250,2500 +1251,2502 +1252,2504 +1253,2506 +1254,2508 +1255,2510 +1256,2512 +1257,2514 +1258,2516 +1259,2518 +1260,2520 +1261,2522 +1262,2524 +1263,2526 +1264,2528 +1265,2530 +1266,2532 +1267,2534 +1268,2536 +1269,2538 +1270,2540 +1271,2542 +1272,2544 +1273,2546 +1274,2548 +1275,2550 +1276,2552 +1277,2554 +1278,2556 +1279,2558 +1280,2560 +1281,2562 +1282,2564 +1283,2566 +1284,2568 +1285,2570 +1286,2572 +1287,2574 +1288,2576 +1289,2578 +1290,2580 +1291,2582 +1292,2584 +1293,2586 +1294,2588 +1295,2590 +1296,2592 +1297,2594 +1298,2596 +1299,2598 +1300,2600 +1301,2602 +1302,2604 +1303,2606 +1304,2608 +1305,2610 +1306,2612 +1307,2614 +1308,2616 +1309,2618 +1310,2620 +1311,2622 +1312,2624 +1313,2626 +1314,2628 +1315,2630 +1316,2632 +1317,2634 +1318,2636 +1319,2638 +1320,2640 +1321,2642 +1322,2644 +1323,2646 +1324,2648 +1325,2650 +1326,2652 +1327,2654 +1328,2656 +1329,2658 +1330,2660 +1331,2662 +1332,2664 +1333,2666 +1334,2668 +1335,2670 +1336,2672 +1337,2674 +1338,2676 +1339,2678 +1340,2680 +1341,2682 +1342,2684 +1343,2686 +1344,2688 +1345,2690 +1346,2692 +1347,2694 +1348,2696 +1349,2698 +1350,2700 +1351,2702 +1352,2704 +1353,2706 +1354,2708 +1355,2710 +1356,2712 +1357,2714 +1358,2716 +1359,2718 +1360,2720 +1361,2722 +1362,2724 +1363,2726 +1364,2728 +1365,2730 +1366,2732 +1367,2734 +1368,2736 +1369,2738 +1370,2740 +1371,2742 +1372,2744 +1373,2746 +1374,2748 +1375,2750 +1376,2752 +1377,2754 +1378,2756 +1379,2758 +1380,2760 +1381,2762 +1382,2764 +1383,2766 +1384,2768 +1385,2770 +1386,2772 +1387,2774 +1388,2776 +1389,2778 +1390,2780 +1391,2782 +1392,2784 +1393,2786 +1394,2788 +1395,2790 +1396,2792 +1397,2794 +1398,2796 +1399,2798 +1400,2800 +1401,2802 +1402,2804 +1403,2806 +1404,2808 +1405,2810 +1406,2812 +1407,2814 +1408,2816 +1409,2818 +1410,2820 +1411,2822 +1412,2824 +1413,2826 +1414,2828 +1415,2830 +1416,2832 +1417,2834 +1418,2836 +1419,2838 +1420,2840 +1421,2842 +1422,2844 +1423,2846 +1424,2848 +1425,2850 +1426,2852 +1427,2854 +1428,2856 +1429,2858 +1430,2860 +1431,2862 +1432,2864 +1433,2866 +1434,2868 +1435,2870 +1436,2872 +1437,2874 +1438,2876 +1439,2878 +1440,2880 +1441,2882 +1442,2884 +1443,2886 +1444,2888 +1445,2890 +1446,2892 +1447,2894 +1448,2896 +1449,2898 +1450,2900 +1451,2902 +1452,2904 +1453,2906 +1454,2908 +1455,2910 +1456,2912 +1457,2914 +1458,2916 +1459,2918 +1460,2920 +1461,2922 +1462,2924 +1463,2926 +1464,2928 +1465,2930 +1466,2932 +1467,2934 +1468,2936 +1469,2938 +1470,2940 +1471,2942 +1472,2944 +1473,2946 +1474,2948 +1475,2950 +1476,2952 +1477,2954 +1478,2956 +1479,2958 +1480,2960 +1481,2962 +1482,2964 +1483,2966 +1484,2968 +1485,2970 +1486,2972 +1487,2974 +1488,2976 +1489,2978 +1490,2980 +1491,2982 +1492,2984 +1493,2986 +1494,2988 +1495,2990 +1496,2992 +1497,2994 +1498,2996 +1499,2998 +1500,3000 +1501,3002 +1502,3004 +1503,3006 +1504,3008 +1505,3010 +1506,3012 +1507,3014 +1508,3016 +1509,3018 +1510,3020 +1511,3022 +1512,3024 +1513,3026 +1514,3028 +1515,3030 +1516,3032 +1517,3034 +1518,3036 +1519,3038 +1520,3040 +1521,3042 +1522,3044 +1523,3046 +1524,3048 +1525,3050 +1526,3052 +1527,3054 +1528,3056 +1529,3058 +1530,3060 +1531,3062 +1532,3064 +1533,3066 +1534,3068 +1535,3070 +1536,3072 +1537,3074 +1538,3076 +1539,3078 +1540,3080 +1541,3082 +1542,3084 +1543,3086 +1544,3088 +1545,3090 +1546,3092 +1547,3094 +1548,3096 +1549,3098 +1550,3100 +1551,3102 +1552,3104 +1553,3106 +1554,3108 +1555,3110 +1556,3112 +1557,3114 +1558,3116 +1559,3118 +1560,3120 +1561,3122 +1562,3124 +1563,3126 +1564,3128 +1565,3130 +1566,3132 +1567,3134 +1568,3136 +1569,3138 +1570,3140 +1571,3142 +1572,3144 +1573,3146 +1574,3148 +1575,3150 +1576,3152 +1577,3154 +1578,3156 +1579,3158 +1580,3160 +1581,3162 +1582,3164 +1583,3166 +1584,3168 +1585,3170 +1586,3172 +1587,3174 +1588,3176 +1589,3178 +1590,3180 +1591,3182 +1592,3184 +1593,3186 +1594,3188 +1595,3190 +1596,3192 +1597,3194 +1598,3196 +1599,3198 +1600,3200 +1601,3202 +1602,3204 +1603,3206 +1604,3208 +1605,3210 +1606,3212 +1607,3214 +1608,3216 +1609,3218 +1610,3220 +1611,3222 +1612,3224 +1613,3226 +1614,3228 +1615,3230 +1616,3232 +1617,3234 +1618,3236 +1619,3238 +1620,3240 +1621,3242 +1622,3244 +1623,3246 +1624,3248 +1625,3250 +1626,3252 +1627,3254 +1628,3256 +1629,3258 +1630,3260 +1631,3262 +1632,3264 +1633,3266 +1634,3268 +1635,3270 +1636,3272 +1637,3274 +1638,3276 +1639,3278 +1640,3280 +1641,3282 +1642,3284 +1643,3286 +1644,3288 +1645,3290 +1646,3292 +1647,3294 +1648,3296 +1649,3298 +1650,3300 +1651,3302 +1652,3304 +1653,3306 +1654,3308 +1655,3310 +1656,3312 +1657,3314 +1658,3316 +1659,3318 +1660,3320 +1661,3322 +1662,3324 +1663,3326 +1664,3328 +1665,3330 +1666,3332 +1667,3334 +1668,3336 +1669,3338 +1670,3340 +1671,3342 +1672,3344 +1673,3346 +1674,3348 +1675,3350 +1676,3352 +1677,3354 +1678,3356 +1679,3358 +1680,3360 +1681,3362 +1682,3364 +1683,3366 +1684,3368 +1685,3370 +1686,3372 +1687,3374 +1688,3376 +1689,3378 +1690,3380 +1691,3382 +1692,3384 +1693,3386 +1694,3388 +1695,3390 +1696,3392 +1697,3394 +1698,3396 +1699,3398 +1700,3400 +1701,3402 +1702,3404 +1703,3406 +1704,3408 +1705,3410 +1706,3412 +1707,3414 +1708,3416 +1709,3418 +1710,3420 +1711,3422 +1712,3424 +1713,3426 +1714,3428 +1715,3430 +1716,3432 +1717,3434 +1718,3436 +1719,3438 +1720,3440 +1721,3442 +1722,3444 +1723,3446 +1724,3448 +1725,3450 +1726,3452 +1727,3454 +1728,3456 +1729,3458 +1730,3460 +1731,3462 +1732,3464 +1733,3466 +1734,3468 +1735,3470 +1736,3472 +1737,3474 +1738,3476 +1739,3478 +1740,3480 +1741,3482 +1742,3484 +1743,3486 +1744,3488 +1745,3490 +1746,3492 +1747,3494 +1748,3496 +1749,3498 +1750,3500 +1751,3502 +1752,3504 +1753,3506 +1754,3508 +1755,3510 +1756,3512 +1757,3514 +1758,3516 +1759,3518 +1760,3520 +1761,3522 +1762,3524 +1763,3526 +1764,3528 +1765,3530 +1766,3532 +1767,3534 +1768,3536 +1769,3538 +1770,3540 +1771,3542 +1772,3544 +1773,3546 +1774,3548 +1775,3550 +1776,3552 +1777,3554 +1778,3556 +1779,3558 +1780,3560 +1781,3562 +1782,3564 +1783,3566 +1784,3568 +1785,3570 +1786,3572 +1787,3574 +1788,3576 +1789,3578 +1790,3580 +1791,3582 +1792,3584 +1793,3586 +1794,3588 +1795,3590 +1796,3592 +1797,3594 +1798,3596 +1799,3598 +1800,3600 +1801,3602 +1802,3604 +1803,3606 +1804,3608 +1805,3610 +1806,3612 +1807,3614 +1808,3616 +1809,3618 +1810,3620 +1811,3622 +1812,3624 +1813,3626 +1814,3628 +1815,3630 +1816,3632 +1817,3634 +1818,3636 +1819,3638 +1820,3640 +1821,3642 +1822,3644 +1823,3646 +1824,3648 +1825,3650 +1826,3652 +1827,3654 +1828,3656 +1829,3658 +1830,3660 +1831,3662 +1832,3664 +1833,3666 +1834,3668 +1835,3670 +1836,3672 +1837,3674 +1838,3676 +1839,3678 +1840,3680 +1841,3682 +1842,3684 +1843,3686 +1844,3688 +1845,3690 +1846,3692 +1847,3694 +1848,3696 +1849,3698 +1850,3700 +1851,3702 +1852,3704 +1853,3706 +1854,3708 +1855,3710 +1856,3712 +1857,3714 +1858,3716 +1859,3718 +1860,3720 +1861,3722 +1862,3724 +1863,3726 +1864,3728 +1865,3730 +1866,3732 +1867,3734 +1868,3736 +1869,3738 +1870,3740 +1871,3742 +1872,3744 +1873,3746 +1874,3748 +1875,3750 +1876,3752 +1877,3754 +1878,3756 +1879,3758 +1880,3760 +1881,3762 +1882,3764 +1883,3766 +1884,3768 +1885,3770 +1886,3772 +1887,3774 +1888,3776 +1889,3778 +1890,3780 +1891,3782 +1892,3784 +1893,3786 +1894,3788 +1895,3790 +1896,3792 +1897,3794 +1898,3796 +1899,3798 +1900,3800 +1901,3802 +1902,3804 +1903,3806 +1904,3808 +1905,3810 +1906,3812 +1907,3814 +1908,3816 +1909,3818 +1910,3820 +1911,3822 +1912,3824 +1913,3826 +1914,3828 +1915,3830 +1916,3832 +1917,3834 +1918,3836 +1919,3838 +1920,3840 +1921,3842 +1922,3844 +1923,3846 +1924,3848 +1925,3850 +1926,3852 +1927,3854 +1928,3856 +1929,3858 +1930,3860 +1931,3862 +1932,3864 +1933,3866 +1934,3868 +1935,3870 +1936,3872 +1937,3874 +1938,3876 +1939,3878 +1940,3880 +1941,3882 +1942,3884 +1943,3886 +1944,3888 +1945,3890 +1946,3892 +1947,3894 +1948,3896 +1949,3898 +1950,3900 +1951,3902 +1952,3904 +1953,3906 +1954,3908 +1955,3910 +1956,3912 +1957,3914 +1958,3916 +1959,3918 +1960,3920 +1961,3922 +1962,3924 +1963,3926 +1964,3928 +1965,3930 +1966,3932 +1967,3934 +1968,3936 +1969,3938 +1970,3940 +1971,3942 +1972,3944 +1973,3946 +1974,3948 +1975,3950 +1976,3952 +1977,3954 +1978,3956 +1979,3958 +1980,3960 +1981,3962 +1982,3964 +1983,3966 +1984,3968 +1985,3970 +1986,3972 +1987,3974 +1988,3976 +1989,3978 +1990,3980 +1991,3982 +1992,3984 +1993,3986 +1994,3988 +1995,3990 +1996,3992 +1997,3994 +1998,3996 +1999,3998 +2000,4000 +2001,4002 +2002,4004 +2003,4006 +2004,4008 +2005,4010 +2006,4012 +2007,4014 +2008,4016 +2009,4018 +2010,4020 +2011,4022 +2012,4024 +2013,4026 +2014,4028 +2015,4030 +2016,4032 +2017,4034 +2018,4036 +2019,4038 +2020,4040 +2021,4042 +2022,4044 +2023,4046 +2024,4048 +2025,4050 +2026,4052 +2027,4054 +2028,4056 +2029,4058 +2030,4060 +2031,4062 +2032,4064 +2033,4066 +2034,4068 +2035,4070 +2036,4072 +2037,4074 +2038,4076 +2039,4078 +2040,4080 +2041,4082 +2042,4084 +2043,4086 +2044,4088 +2045,4090 +2046,4092 +2047,4094 +2048,4096 +2049,4098 +2050,4100 +2051,4102 +2052,4104 +2053,4106 +2054,4108 +2055,4110 +2056,4112 +2057,4114 +2058,4116 +2059,4118 +2060,4120 +2061,4122 +2062,4124 +2063,4126 +2064,4128 +2065,4130 +2066,4132 +2067,4134 +2068,4136 +2069,4138 +2070,4140 +2071,4142 +2072,4144 +2073,4146 +2074,4148 +2075,4150 +2076,4152 +2077,4154 +2078,4156 +2079,4158 +2080,4160 +2081,4162 +2082,4164 +2083,4166 +2084,4168 +2085,4170 +2086,4172 +2087,4174 +2088,4176 +2089,4178 +2090,4180 +2091,4182 +2092,4184 +2093,4186 +2094,4188 +2095,4190 +2096,4192 +2097,4194 +2098,4196 +2099,4198 +2100,4200 +2101,4202 +2102,4204 +2103,4206 +2104,4208 +2105,4210 +2106,4212 +2107,4214 +2108,4216 +2109,4218 +2110,4220 +2111,4222 +2112,4224 +2113,4226 +2114,4228 +2115,4230 +2116,4232 +2117,4234 +2118,4236 +2119,4238 +2120,4240 +2121,4242 +2122,4244 +2123,4246 +2124,4248 +2125,4250 +2126,4252 +2127,4254 +2128,4256 +2129,4258 +2130,4260 +2131,4262 +2132,4264 +2133,4266 +2134,4268 +2135,4270 +2136,4272 +2137,4274 +2138,4276 +2139,4278 +2140,4280 +2141,4282 +2142,4284 +2143,4286 +2144,4288 +2145,4290 +2146,4292 +2147,4294 +2148,4296 +2149,4298 +2150,4300 +2151,4302 +2152,4304 +2153,4306 +2154,4308 +2155,4310 +2156,4312 +2157,4314 +2158,4316 +2159,4318 +2160,4320 +2161,4322 +2162,4324 +2163,4326 +2164,4328 +2165,4330 +2166,4332 +2167,4334 +2168,4336 +2169,4338 +2170,4340 +2171,4342 +2172,4344 +2173,4346 +2174,4348 +2175,4350 +2176,4352 +2177,4354 +2178,4356 +2179,4358 +2180,4360 +2181,4362 +2182,4364 +2183,4366 +2184,4368 +2185,4370 +2186,4372 +2187,4374 +2188,4376 +2189,4378 +2190,4380 +2191,4382 +2192,4384 +2193,4386 +2194,4388 +2195,4390 +2196,4392 +2197,4394 +2198,4396 +2199,4398 +2200,4400 +2201,4402 +2202,4404 +2203,4406 +2204,4408 +2205,4410 +2206,4412 +2207,4414 +2208,4416 +2209,4418 +2210,4420 +2211,4422 +2212,4424 +2213,4426 +2214,4428 +2215,4430 +2216,4432 +2217,4434 +2218,4436 +2219,4438 +2220,4440 +2221,4442 +2222,4444 +2223,4446 +2224,4448 +2225,4450 +2226,4452 +2227,4454 +2228,4456 +2229,4458 +2230,4460 +2231,4462 +2232,4464 +2233,4466 +2234,4468 +2235,4470 +2236,4472 +2237,4474 +2238,4476 +2239,4478 +2240,4480 +2241,4482 +2242,4484 +2243,4486 +2244,4488 +2245,4490 +2246,4492 +2247,4494 +2248,4496 +2249,4498 +2250,4500 +2251,4502 +2252,4504 +2253,4506 +2254,4508 +2255,4510 +2256,4512 +2257,4514 +2258,4516 +2259,4518 +2260,4520 +2261,4522 +2262,4524 +2263,4526 +2264,4528 +2265,4530 +2266,4532 +2267,4534 +2268,4536 +2269,4538 +2270,4540 +2271,4542 +2272,4544 +2273,4546 +2274,4548 +2275,4550 +2276,4552 +2277,4554 +2278,4556 +2279,4558 +2280,4560 +2281,4562 +2282,4564 +2283,4566 +2284,4568 +2285,4570 +2286,4572 +2287,4574 +2288,4576 +2289,4578 +2290,4580 +2291,4582 +2292,4584 +2293,4586 +2294,4588 +2295,4590 +2296,4592 +2297,4594 +2298,4596 +2299,4598 +2300,4600 +2301,4602 +2302,4604 +2303,4606 +2304,4608 +2305,4610 +2306,4612 +2307,4614 +2308,4616 +2309,4618 +2310,4620 +2311,4622 +2312,4624 +2313,4626 +2314,4628 +2315,4630 +2316,4632 +2317,4634 +2318,4636 +2319,4638 +2320,4640 +2321,4642 +2322,4644 +2323,4646 +2324,4648 +2325,4650 +2326,4652 +2327,4654 +2328,4656 +2329,4658 +2330,4660 +2331,4662 +2332,4664 +2333,4666 +2334,4668 +2335,4670 +2336,4672 +2337,4674 +2338,4676 +2339,4678 +2340,4680 +2341,4682 +2342,4684 +2343,4686 +2344,4688 +2345,4690 +2346,4692 +2347,4694 +2348,4696 +2349,4698 +2350,4700 +2351,4702 +2352,4704 +2353,4706 +2354,4708 +2355,4710 +2356,4712 +2357,4714 +2358,4716 +2359,4718 +2360,4720 +2361,4722 +2362,4724 +2363,4726 +2364,4728 +2365,4730 +2366,4732 +2367,4734 +2368,4736 +2369,4738 +2370,4740 +2371,4742 +2372,4744 +2373,4746 +2374,4748 +2375,4750 +2376,4752 +2377,4754 +2378,4756 +2379,4758 +2380,4760 +2381,4762 +2382,4764 +2383,4766 +2384,4768 +2385,4770 +2386,4772 +2387,4774 +2388,4776 +2389,4778 +2390,4780 +2391,4782 +2392,4784 +2393,4786 +2394,4788 +2395,4790 +2396,4792 +2397,4794 +2398,4796 +2399,4798 +2400,4800 +2401,4802 +2402,4804 +2403,4806 +2404,4808 +2405,4810 +2406,4812 +2407,4814 +2408,4816 +2409,4818 +2410,4820 +2411,4822 +2412,4824 +2413,4826 +2414,4828 +2415,4830 +2416,4832 +2417,4834 +2418,4836 +2419,4838 +2420,4840 +2421,4842 +2422,4844 +2423,4846 +2424,4848 +2425,4850 +2426,4852 +2427,4854 +2428,4856 +2429,4858 +2430,4860 +2431,4862 +2432,4864 +2433,4866 +2434,4868 +2435,4870 +2436,4872 +2437,4874 +2438,4876 +2439,4878 +2440,4880 +2441,4882 +2442,4884 +2443,4886 +2444,4888 +2445,4890 +2446,4892 +2447,4894 +2448,4896 +2449,4898 +2450,4900 +2451,4902 +2452,4904 +2453,4906 +2454,4908 +2455,4910 +2456,4912 +2457,4914 +2458,4916 +2459,4918 +2460,4920 +2461,4922 +2462,4924 +2463,4926 +2464,4928 +2465,4930 +2466,4932 +2467,4934 +2468,4936 +2469,4938 +2470,4940 +2471,4942 +2472,4944 +2473,4946 +2474,4948 +2475,4950 +2476,4952 +2477,4954 +2478,4956 +2479,4958 +2480,4960 +2481,4962 +2482,4964 +2483,4966 +2484,4968 +2485,4970 +2486,4972 +2487,4974 +2488,4976 +2489,4978 +2490,4980 +2491,4982 +2492,4984 +2493,4986 +2494,4988 +2495,4990 +2496,4992 +2497,4994 +2498,4996 +2499,4998 +2500,5000 +2501,5002 +2502,5004 +2503,5006 +2504,5008 +2505,5010 +2506,5012 +2507,5014 +2508,5016 +2509,5018 +2510,5020 +2511,5022 +2512,5024 +2513,5026 +2514,5028 +2515,5030 +2516,5032 +2517,5034 +2518,5036 +2519,5038 +2520,5040 +2521,5042 +2522,5044 +2523,5046 +2524,5048 +2525,5050 +2526,5052 +2527,5054 +2528,5056 +2529,5058 +2530,5060 +2531,5062 +2532,5064 +2533,5066 +2534,5068 +2535,5070 +2536,5072 +2537,5074 +2538,5076 +2539,5078 +2540,5080 +2541,5082 +2542,5084 +2543,5086 +2544,5088 +2545,5090 +2546,5092 +2547,5094 +2548,5096 +2549,5098 +2550,5100 +2551,5102 +2552,5104 +2553,5106 +2554,5108 +2555,5110 +2556,5112 +2557,5114 +2558,5116 +2559,5118 +2560,5120 +2561,5122 +2562,5124 +2563,5126 +2564,5128 +2565,5130 +2566,5132 +2567,5134 +2568,5136 +2569,5138 +2570,5140 +2571,5142 +2572,5144 +2573,5146 +2574,5148 +2575,5150 +2576,5152 +2577,5154 +2578,5156 +2579,5158 +2580,5160 +2581,5162 +2582,5164 +2583,5166 +2584,5168 +2585,5170 +2586,5172 +2587,5174 +2588,5176 +2589,5178 +2590,5180 +2591,5182 +2592,5184 +2593,5186 +2594,5188 +2595,5190 +2596,5192 +2597,5194 +2598,5196 +2599,5198 +2600,5200 +2601,5202 +2602,5204 +2603,5206 +2604,5208 +2605,5210 +2606,5212 +2607,5214 +2608,5216 +2609,5218 +2610,5220 +2611,5222 +2612,5224 +2613,5226 +2614,5228 +2615,5230 +2616,5232 +2617,5234 +2618,5236 +2619,5238 +2620,5240 +2621,5242 +2622,5244 +2623,5246 +2624,5248 +2625,5250 +2626,5252 +2627,5254 +2628,5256 +2629,5258 +2630,5260 +2631,5262 +2632,5264 +2633,5266 +2634,5268 +2635,5270 +2636,5272 +2637,5274 +2638,5276 +2639,5278 +2640,5280 +2641,5282 +2642,5284 +2643,5286 +2644,5288 +2645,5290 +2646,5292 +2647,5294 +2648,5296 +2649,5298 +2650,5300 +2651,5302 +2652,5304 +2653,5306 +2654,5308 +2655,5310 +2656,5312 +2657,5314 +2658,5316 +2659,5318 +2660,5320 +2661,5322 +2662,5324 +2663,5326 +2664,5328 +2665,5330 +2666,5332 +2667,5334 +2668,5336 +2669,5338 +2670,5340 +2671,5342 +2672,5344 +2673,5346 +2674,5348 +2675,5350 +2676,5352 +2677,5354 +2678,5356 +2679,5358 +2680,5360 +2681,5362 +2682,5364 +2683,5366 +2684,5368 +2685,5370 +2686,5372 +2687,5374 +2688,5376 +2689,5378 +2690,5380 +2691,5382 +2692,5384 +2693,5386 +2694,5388 +2695,5390 +2696,5392 +2697,5394 +2698,5396 +2699,5398 +2700,5400 +2701,5402 +2702,5404 +2703,5406 +2704,5408 +2705,5410 +2706,5412 +2707,5414 +2708,5416 +2709,5418 +2710,5420 +2711,5422 +2712,5424 +2713,5426 +2714,5428 +2715,5430 +2716,5432 +2717,5434 +2718,5436 +2719,5438 +2720,5440 +2721,5442 +2722,5444 +2723,5446 +2724,5448 +2725,5450 +2726,5452 +2727,5454 +2728,5456 +2729,5458 +2730,5460 +2731,5462 +2732,5464 +2733,5466 +2734,5468 +2735,5470 +2736,5472 +2737,5474 +2738,5476 +2739,5478 +2740,5480 +2741,5482 +2742,5484 +2743,5486 +2744,5488 +2745,5490 +2746,5492 +2747,5494 +2748,5496 +2749,5498 +2750,5500 +2751,5502 +2752,5504 +2753,5506 +2754,5508 +2755,5510 +2756,5512 +2757,5514 +2758,5516 +2759,5518 +2760,5520 +2761,5522 +2762,5524 +2763,5526 +2764,5528 +2765,5530 +2766,5532 +2767,5534 +2768,5536 +2769,5538 +2770,5540 +2771,5542 +2772,5544 +2773,5546 +2774,5548 +2775,5550 +2776,5552 +2777,5554 +2778,5556 +2779,5558 +2780,5560 +2781,5562 +2782,5564 +2783,5566 +2784,5568 +2785,5570 +2786,5572 +2787,5574 +2788,5576 +2789,5578 +2790,5580 +2791,5582 +2792,5584 +2793,5586 +2794,5588 +2795,5590 +2796,5592 +2797,5594 +2798,5596 +2799,5598 +2800,5600 +2801,5602 +2802,5604 +2803,5606 +2804,5608 +2805,5610 +2806,5612 +2807,5614 +2808,5616 +2809,5618 +2810,5620 +2811,5622 +2812,5624 +2813,5626 +2814,5628 +2815,5630 +2816,5632 +2817,5634 +2818,5636 +2819,5638 +2820,5640 +2821,5642 +2822,5644 +2823,5646 +2824,5648 +2825,5650 +2826,5652 +2827,5654 +2828,5656 +2829,5658 +2830,5660 +2831,5662 +2832,5664 +2833,5666 +2834,5668 +2835,5670 +2836,5672 +2837,5674 +2838,5676 +2839,5678 +2840,5680 +2841,5682 +2842,5684 +2843,5686 +2844,5688 +2845,5690 +2846,5692 +2847,5694 +2848,5696 +2849,5698 +2850,5700 +2851,5702 +2852,5704 +2853,5706 +2854,5708 +2855,5710 +2856,5712 +2857,5714 +2858,5716 +2859,5718 +2860,5720 +2861,5722 +2862,5724 +2863,5726 +2864,5728 +2865,5730 +2866,5732 +2867,5734 +2868,5736 +2869,5738 +2870,5740 +2871,5742 +2872,5744 +2873,5746 +2874,5748 +2875,5750 +2876,5752 +2877,5754 +2878,5756 +2879,5758 +2880,5760 +2881,5762 +2882,5764 +2883,5766 +2884,5768 +2885,5770 +2886,5772 +2887,5774 +2888,5776 +2889,5778 +2890,5780 +2891,5782 +2892,5784 +2893,5786 +2894,5788 +2895,5790 +2896,5792 +2897,5794 +2898,5796 +2899,5798 +2900,5800 +2901,5802 +2902,5804 +2903,5806 +2904,5808 +2905,5810 +2906,5812 +2907,5814 +2908,5816 +2909,5818 +2910,5820 +2911,5822 +2912,5824 +2913,5826 +2914,5828 +2915,5830 +2916,5832 +2917,5834 +2918,5836 +2919,5838 +2920,5840 +2921,5842 +2922,5844 +2923,5846 +2924,5848 +2925,5850 +2926,5852 +2927,5854 +2928,5856 +2929,5858 +2930,5860 +2931,5862 +2932,5864 +2933,5866 +2934,5868 +2935,5870 +2936,5872 +2937,5874 +2938,5876 +2939,5878 +2940,5880 +2941,5882 +2942,5884 +2943,5886 +2944,5888 +2945,5890 +2946,5892 +2947,5894 +2948,5896 +2949,5898 +2950,5900 +2951,5902 +2952,5904 +2953,5906 +2954,5908 +2955,5910 +2956,5912 +2957,5914 +2958,5916 +2959,5918 +2960,5920 +2961,5922 +2962,5924 +2963,5926 +2964,5928 +2965,5930 +2966,5932 +2967,5934 +2968,5936 +2969,5938 +2970,5940 +2971,5942 +2972,5944 +2973,5946 +2974,5948 +2975,5950 +2976,5952 +2977,5954 +2978,5956 +2979,5958 +2980,5960 +2981,5962 +2982,5964 +2983,5966 +2984,5968 +2985,5970 +2986,5972 +2987,5974 +2988,5976 +2989,5978 +2990,5980 +2991,5982 +2992,5984 +2993,5986 +2994,5988 +2995,5990 +2996,5992 +2997,5994 +2998,5996 +2999,5998 +3000,6000 diff --git a/cpp/test/tools/e2e/fixtures/recorded/decdfb5a1f49df91.csv b/cpp/test/tools/e2e/fixtures/recorded/decdfb5a1f49df91.csv new file mode 100644 index 000000000..e0e107952 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/decdfb5a1f49df91.csv @@ -0,0 +1,2 @@ +time,s1 +0,1 diff --git a/cpp/test/tools/e2e/fixtures/recorded/df3a55081911cd32.csv b/cpp/test/tools/e2e/fixtures/recorded/df3a55081911cd32.csv new file mode 100644 index 000000000..bc1a68e27 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/df3a55081911cd32.csv @@ -0,0 +1,3 @@ +time,s1 +5,50 +1,10 diff --git a/cpp/test/tools/e2e/fixtures/recorded/dfb06bb1a4e09036.csv b/cpp/test/tools/e2e/fixtures/recorded/dfb06bb1a4e09036.csv new file mode 100644 index 000000000..1f8a95d8e --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/dfb06bb1a4e09036.csv @@ -0,0 +1,5 @@ +time,site,temp,note +1000,beijing,20,n0 +2000,shanghai,21,n1 +3000,beijing,22,\N +4000,shanghai,23,n3 diff --git a/cpp/test/tools/e2e/fixtures/recorded/e2ca60a29f45f9e6.csv b/cpp/test/tools/e2e/fixtures/recorded/e2ca60a29f45f9e6.csv new file mode 100644 index 000000000..c1b813bfd --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/e2ca60a29f45f9e6.csv @@ -0,0 +1,2 @@ +time,s1 +0,2024-1-1 diff --git a/cpp/test/tools/e2e/fixtures/recorded/e47f2cf974f4288d.csv b/cpp/test/tools/e2e/fixtures/recorded/e47f2cf974f4288d.csv new file mode 100644 index 000000000..653a9608d --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/e47f2cf974f4288d.csv @@ -0,0 +1,8 @@ +time,site,note +6000,\\site,tag\end +7000,\\site,\\N +1000,s1,\N +2000,s1,\\N +3000,s1,\\leading +4000,s1,back\slash +5000,s1,"\\with,comma" diff --git a/cpp/test/tools/e2e/fixtures/recorded/e5721dc3ee3437dd.csv b/cpp/test/tools/e2e/fixtures/recorded/e5721dc3ee3437dd.csv new file mode 100644 index 000000000..0002f3399 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/e5721dc3ee3437dd.csv @@ -0,0 +1,2 @@ +time,s1 +0,1e400 diff --git a/cpp/test/tools/e2e/fixtures/recorded/e7c20447ea054908.tsfile b/cpp/test/tools/e2e/fixtures/recorded/e7c20447ea054908.tsfile new file mode 100644 index 000000000..3e67cbec0 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/e7c20447ea054908.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/e7e0024a5247b1f7.tsfile b/cpp/test/tools/e2e/fixtures/recorded/e7e0024a5247b1f7.tsfile new file mode 100644 index 000000000..cc5d4adcb Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/e7e0024a5247b1f7.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/e8c9ceba19eff9ac.tsfile b/cpp/test/tools/e2e/fixtures/recorded/e8c9ceba19eff9ac.tsfile new file mode 100644 index 000000000..0044ae818 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/e8c9ceba19eff9ac.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/ea9c53e37f6ee36c.csv b/cpp/test/tools/e2e/fixtures/recorded/ea9c53e37f6ee36c.csv new file mode 100644 index 000000000..a1b069a20 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/ea9c53e37f6ee36c.csv @@ -0,0 +1,4 @@ +time,id1,s1 +0,dev,0 +1,dev,10 +2,dev,20 diff --git a/cpp/test/tools/e2e/fixtures/recorded/ebbbc7b819bea734.csv b/cpp/test/tools/e2e/fixtures/recorded/ebbbc7b819bea734.csv new file mode 100644 index 000000000..127022944 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/ebbbc7b819bea734.csv @@ -0,0 +1,2 @@ +time,site,temp +0,dev,"unterminated diff --git a/cpp/test/tools/e2e/fixtures/recorded/f23d8f69b526430f.csv b/cpp/test/tools/e2e/fixtures/recorded/f23d8f69b526430f.csv new file mode 100644 index 000000000..0945fc063 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/f23d8f69b526430f.csv @@ -0,0 +1,2 @@ +time,site,temp +01,dev,1 diff --git a/cpp/test/tools/e2e/fixtures/recorded/f6209221447efc09.tsfile b/cpp/test/tools/e2e/fixtures/recorded/f6209221447efc09.tsfile new file mode 100644 index 000000000..82e82b1e0 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/f6209221447efc09.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/f65a26f837b23e39.tsfile b/cpp/test/tools/e2e/fixtures/recorded/f65a26f837b23e39.tsfile new file mode 100644 index 000000000..daf7ffa1b Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/f65a26f837b23e39.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/f70c095c6ba45072.tsfile b/cpp/test/tools/e2e/fixtures/recorded/f70c095c6ba45072.tsfile new file mode 100644 index 000000000..574940f66 Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/f70c095c6ba45072.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/recorded/fda14729ef2687ab.csv b/cpp/test/tools/e2e/fixtures/recorded/fda14729ef2687ab.csv new file mode 100644 index 000000000..80eb36560 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/recorded/fda14729ef2687ab.csv @@ -0,0 +1,4 @@ +time,id,s1 +1,A,10 +1,B,20 +2,A,30 diff --git a/cpp/test/tools/e2e/fixtures/recorded/ff981d1dcd989b10.tsfile b/cpp/test/tools/e2e/fixtures/recorded/ff981d1dcd989b10.tsfile new file mode 100644 index 000000000..64b6735dc Binary files /dev/null and b/cpp/test/tools/e2e/fixtures/recorded/ff981d1dcd989b10.tsfile differ diff --git a/cpp/test/tools/e2e/fixtures/stdin.csv b/cpp/test/tools/e2e/fixtures/stdin.csv new file mode 100644 index 000000000..40e8ab954 --- /dev/null +++ b/cpp/test/tools/e2e/fixtures/stdin.csv @@ -0,0 +1,3 @@ +time,id,value +0,dev,10 +1,dev,20 diff --git a/cpp/test/tools/golden/category_edge_cat_csv.txt b/cpp/test/tools/e2e/golden/category_edge_cat_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_cat_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_cat_csv.txt diff --git a/cpp/test/tools/golden/category_edge_cat_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_cat_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_cat_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_cat_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_cat_table.txt b/cpp/test/tools/e2e/golden/category_edge_cat_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_cat_table.txt rename to cpp/test/tools/e2e/golden/category_edge_cat_table.txt diff --git a/cpp/test/tools/golden/category_edge_count_csv.txt b/cpp/test/tools/e2e/golden/category_edge_count_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_count_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_count_csv.txt diff --git a/cpp/test/tools/golden/category_edge_count_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_count_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_count_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_count_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_count_table.txt b/cpp/test/tools/e2e/golden/category_edge_count_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_count_table.txt rename to cpp/test/tools/e2e/golden/category_edge_count_table.txt diff --git a/cpp/test/tools/golden/category_edge_export_csv.txt b/cpp/test/tools/e2e/golden/category_edge_export_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_export_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_export_csv.txt diff --git a/cpp/test/tools/golden/category_edge_export_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_export_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_export_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_export_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_export_table.txt b/cpp/test/tools/e2e/golden/category_edge_export_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_export_table.txt rename to cpp/test/tools/e2e/golden/category_edge_export_table.txt diff --git a/cpp/test/tools/golden/category_edge_head_csv.txt b/cpp/test/tools/e2e/golden/category_edge_head_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_head_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_head_csv.txt diff --git a/cpp/test/tools/golden/category_edge_head_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_head_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_head_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_head_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_head_table.txt b/cpp/test/tools/e2e/golden/category_edge_head_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_head_table.txt rename to cpp/test/tools/e2e/golden/category_edge_head_table.txt diff --git a/cpp/test/tools/golden/category_edge_ls_csv.txt b/cpp/test/tools/e2e/golden/category_edge_ls_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_ls_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_ls_csv.txt diff --git a/cpp/test/tools/golden/category_edge_ls_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_ls_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_ls_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_ls_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_ls_table.txt b/cpp/test/tools/e2e/golden/category_edge_ls_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_ls_table.txt rename to cpp/test/tools/e2e/golden/category_edge_ls_table.txt diff --git a/cpp/test/tools/golden/category_edge_meta_csv.txt b/cpp/test/tools/e2e/golden/category_edge_meta_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_meta_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_meta_csv.txt diff --git a/cpp/test/tools/golden/category_edge_meta_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_meta_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_meta_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_meta_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_meta_table.txt b/cpp/test/tools/e2e/golden/category_edge_meta_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_meta_table.txt rename to cpp/test/tools/e2e/golden/category_edge_meta_table.txt diff --git a/cpp/test/tools/golden/category_edge_schema_csv.txt b/cpp/test/tools/e2e/golden/category_edge_schema_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_schema_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_schema_csv.txt diff --git a/cpp/test/tools/golden/category_edge_schema_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_schema_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_schema_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_schema_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_schema_table.txt b/cpp/test/tools/e2e/golden/category_edge_schema_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_schema_table.txt rename to cpp/test/tools/e2e/golden/category_edge_schema_table.txt diff --git a/cpp/test/tools/golden/category_edge_sketch.txt b/cpp/test/tools/e2e/golden/category_edge_sketch.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_sketch.txt rename to cpp/test/tools/e2e/golden/category_edge_sketch.txt diff --git a/cpp/test/tools/golden/category_edge_stats_csv.txt b/cpp/test/tools/e2e/golden/category_edge_stats_csv.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_stats_csv.txt rename to cpp/test/tools/e2e/golden/category_edge_stats_csv.txt diff --git a/cpp/test/tools/golden/category_edge_stats_ndjson.txt b/cpp/test/tools/e2e/golden/category_edge_stats_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_stats_ndjson.txt rename to cpp/test/tools/e2e/golden/category_edge_stats_ndjson.txt diff --git a/cpp/test/tools/golden/category_edge_stats_table.txt b/cpp/test/tools/e2e/golden/category_edge_stats_table.txt similarity index 100% rename from cpp/test/tools/golden/category_edge_stats_table.txt rename to cpp/test/tools/e2e/golden/category_edge_stats_table.txt diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CatFiltersRowsByTagEq/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatFiltersRowsByTagEq/001.stdout.txt new file mode 100644 index 000000000..0868507df --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatFiltersRowsByTagEq/001.stdout.txt @@ -0,0 +1,3 @@ +time,id1,s1 +1,dev_b,20 +2,dev_b,30 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CatPushesDownOffsetAndLimit/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatPushesDownOffsetAndLimit/001.stdout.txt new file mode 100644 index 000000000..676c4ae4b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatPushesDownOffsetAndLimit/001.stdout.txt @@ -0,0 +1,3 @@ +time,id1,id2,s1 +2,id1_field_1,id2_field_2,20 +3,id1_field_1,id2_field_2,30 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/001.stderr.txt new file mode 100644 index 000000000..d66c23b8c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/001.stderr.txt @@ -0,0 +1 @@ +Error: FIELD 'missing' does not exist in table 'table1' diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/002.stderr.txt new file mode 100644 index 000000000..cc12f387d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/002.stderr.txt @@ -0,0 +1 @@ +Error: column 'id1' is not a FIELD in table 'table1' diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/001.stdout.txt new file mode 100644 index 000000000..9fe9dd2b1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/001.stdout.txt @@ -0,0 +1,5 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,sensors_a,id1,TAG,1,1,1,0,0,0,scan +table,sensors_a,s1,FIELD,1,1,1,0,0,0,scan +table,sensors_b,id1,TAG,1,1,1,0,0,0,scan +table,sensors_b,s1,FIELD,1,1,1,0,0,0,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/002.stdout.txt new file mode 100644 index 000000000..0b6dad311 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/002.stdout.txt @@ -0,0 +1,3 @@ +model,object,tag.id1,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,sensors_a,sensors_a_tag,s1,INT64,1,0,0,0,10,10,10,10,\N,statistics +table,sensors_b,sensors_b_tag,s1,INT64,1,0,0,0,20,20,20,20,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/001.stdout.txt new file mode 100644 index 000000000..49d15376e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/001.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,sensors_a,s1,FIELD,1,1,1,0,0,0,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/002.stdout.txt new file mode 100644 index 000000000..20abc7964 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/002.stdout.txt @@ -0,0 +1,2 @@ +model,object,tag.id1,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,sensors_a,sensors_a_tag,s1,INT64,1,0,0,0,10,10,10,10,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/001.stdout.txt new file mode 100644 index 000000000..7d91b1a5d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/001.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +tree,root.test.d1,left,FIELD,1,\N,1,0,0,0,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/002.stdout.txt new file mode 100644 index 000000000..518c381cc --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/002.stdout.txt @@ -0,0 +1,2 @@ +model,object,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +tree,root.test.d1,left,INT32,1,0,0,0,10,10,10,10,10,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.CountReportsColumnCountsWithoutSummaryRows/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountReportsColumnCountsWithoutSummaryRows/001.stdout.txt new file mode 100644 index 000000000..4e28581ce --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.CountReportsColumnCountsWithoutSummaryRows/001.stdout.txt @@ -0,0 +1,4 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,table1,id1,TAG,5,1,5,0,0,4,scan +table,table1,id2,TAG,5,1,5,0,0,4,scan +table,table1,s1,FIELD,5,1,5,0,0,4,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadFiltersRowsByTagRegexp/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadFiltersRowsByTagRegexp/001.stdout.txt new file mode 100644 index 000000000..a67627f0a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadFiltersRowsByTagRegexp/001.stdout.txt @@ -0,0 +1,4 @@ +time,id1,s1 +1,dev_b,20 +2,dev_b,30 +3,dev_c,40 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadProjectsAndLimits/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadProjectsAndLimits/001.stdout.txt new file mode 100644 index 000000000..c8d501999 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadProjectsAndLimits/001.stdout.txt @@ -0,0 +1,3 @@ +time,id1,id2,s1 +0,id1_field_1,id2_field_2,0 +1,id1_field_1,id2_field_2,10 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadPushesDownOffsetAndLimit/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadPushesDownOffsetAndLimit/001.stdout.txt new file mode 100644 index 000000000..c06bd06f1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.HeadPushesDownOffsetAndLimit/001.stdout.txt @@ -0,0 +1,4 @@ +time,id1,id2,s1 +1,id1_field_1,id2_field_2,10 +2,id1_field_1,id2_field_2,20 +3,id1_field_1,id2_field_2,30 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/001.stdout.txt new file mode 100644 index 000000000..73156b192 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/001.stdout.txt @@ -0,0 +1,3 @@ +model,object +tree,root.device� +tree,root.中文 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/002.stdout.txt new file mode 100644 index 000000000..9b783a784 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/002.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,data_type,encoding,compression +tree,root.device�,value�,FIELD,INT64,PLAIN,UNCOMPRESSED +tree,root.中文,温度,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/003.stdout.txt new file mode 100644 index 000000000..67e3321ca --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/003.stdout.txt @@ -0,0 +1,3 @@ +model,object,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +tree,root.device�,value�,INT64,1,0,0,0,42,42,42,42,\N,statistics +tree,root.中文,温度,INT64,1,0,0,0,7,7,7,7,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/004.stdout.txt new file mode 100644 index 000000000..67daf295d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/004.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +tree,root.device�,value�,FIELD,1,\N,1,0,0,0,statistics +tree,root.中文,温度,FIELD,1,\N,1,0,0,0,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/005.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/005.stdout.txt new file mode 100644 index 000000000..f988d1bd3 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/005.stdout.txt @@ -0,0 +1,2 @@ +time,value� +0,42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/008.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/008.stdout.txt new file mode 100644 index 000000000..31d26a2a1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/008.stdout.txt @@ -0,0 +1,2 @@ +{"model":"tree","object":"root.device�"} +{"model":"tree","object":"root.中文"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/009.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/009.stdout.txt new file mode 100644 index 000000000..0d4a9f09a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/009.stdout.txt @@ -0,0 +1,2 @@ +{"model":"tree","object":"root.device�","column":"value�","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"tree","object":"root.中文","column":"温度","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/010.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/010.stdout.txt new file mode 100644 index 000000000..f45627313 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/010.stdout.txt @@ -0,0 +1,2 @@ +{"model":"tree","object":"root.device�","field":"value�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"0","max_time":"0","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"tree","object":"root.中文","field":"温度","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"0","max_time":"0","min":"7","max":"7","first":"7","last":"7","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/011.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/011.stdout.txt new file mode 100644 index 000000000..ff3c025fb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/011.stdout.txt @@ -0,0 +1,2 @@ +{"model":"tree","object":"root.device�","column":"value�","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"0","max_time":"0","time_source":"statistics"} +{"model":"tree","object":"root.中文","column":"温度","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"0","max_time":"0","time_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt new file mode 100644 index 000000000..98f465c51 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt @@ -0,0 +1 @@ +{"time":"0","value�":"42"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/015.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/015.stdout.txt new file mode 100644 index 000000000..2c8691cf6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/015.stdout.txt @@ -0,0 +1,3 @@ +model object +tree root.device� +tree root.中文 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/016.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/016.stdout.txt new file mode 100644 index 000000000..f93e745b6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/016.stdout.txt @@ -0,0 +1,3 @@ +model object column category data_type encoding compression +tree root.device� value� FIELD INT64 PLAIN UNCOMPRESSED +tree root.中文 温度 FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/017.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/017.stdout.txt new file mode 100644 index 000000000..1478be712 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/017.stdout.txt @@ -0,0 +1,3 @@ +model object field data_type non_null_count null_count min_time max_time min max first last sum stats_source +tree root.device� value� INT64 1 0 0 0 42 42 42 42 statistics +tree root.中文 温度 INT64 1 0 0 0 7 7 7 7 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/018.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/018.stdout.txt new file mode 100644 index 000000000..f3d072950 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/018.stdout.txt @@ -0,0 +1,3 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +tree root.device� value� FIELD 1 1 0 0 0 statistics +tree root.中文 温度 FIELD 1 1 0 0 0 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/019.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/019.stdout.txt new file mode 100644 index 000000000..48c469834 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/019.stdout.txt @@ -0,0 +1,2 @@ +time value� +0 42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/022.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/022.stdout.txt new file mode 100644 index 000000000..9de6e7746 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/022.stdout.txt @@ -0,0 +1,68 @@ +-------------------------------- TsFile Sketch -------------------------------- +file path: tsfile_cli_utf8_names_328.tsfile +file length: 538 + + POSITION| CONTENT + -------- ------- + 0| [magic head] TsFile + 6| [version number] 4 +||||||||||||||||||||| [ChunkGroup] of root.device�, num of Chunks:1 + 7| [ChunkGroup Header] + 7| [marker] 0 + 8| [deviceID] root.device� size=14 + 22| [Chunk] of root.device�.value�, startTime: 0 endTime: 0 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 22| [Chunk Header] marker=5, measurementID=value�, dataSize=35, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=13 + 35| [Page Header] HeaderSize:2, UncompressedSize:33, CompressedSize:33 + 37| [Page Data] Size:33 +||||||||||||||||||||| [ChunkGroup] of root.device� ends +||||||||||||||||||||| [ChunkGroup] of root.中文, num of Chunks:1 + 70| [ChunkGroup Header] + 70| [marker] 0 + 71| [deviceID] root.中文 size=13 + 84| [Chunk] of root.中文.温度, startTime: 0 endTime: 0 count: 1 [minValue:7,maxValue:7,firstValue:7,lastValue:7,sumValue:7.0] + 84| [Chunk Header] marker=5, measurementID=温度, dataSize=35, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=12 + 96| [Page Header] HeaderSize:2, UncompressedSize:33, CompressedSize:33 + 98| [Page Data] Size:33 +||||||||||||||||||||| [ChunkGroup] of root.中文 ends + 148| [marker] 2 + 149| [TimeseriesMetadata] of root.device�.value�, tsDataType:INT64, sizeWithoutChunkMetadata:68, startTime: 0 endTime: 0 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 217| [ChunkMetadata] offset=22, size=8 + 225| [TimeseriesMetadata] of root.中文.温度, tsDataType:INT64, sizeWithoutChunkMetadata:67, startTime: 0 endTime: 0 count: 1 [minValue:7,maxValue:7,firstValue:7,lastValue:7,sumValue:7.0] + 292| [ChunkMetadata] offset=84, size=8 + 300| [MetadataIndexNode] + 300| childrenCnt=1 + 301| + 317| endOffset=225 + 325| nodeType=LEAF_MEASUREMENT + 326| [MetadataIndexNode] + 326| childrenCnt=1 + 327| <温度, 225> + 342| endOffset=300 + 350| nodeType=LEAF_MEASUREMENT +||||||||||||||||||||| [TsFileMetadata] begins + 351| TableIndexRootCnt=1 + 355| [Table Name] root, size=8 + 363| [MetadataIndexNode] + 363| childrenCnt=2 + 364| + 386| + 407| endOffset=351 + 415| nodeType=LEAF_DEVICE + 416| TableSchemaCnt=0 + 420| [Meta Offset] 148 + 428| [Bloom Filter Size] bit vector byte array length=275 + 432| [Bloom Filter] , filterCapacity=256, hashFunctionSize=5 +||||||||||||||||||||| [TsFileMetadata] ends + 528| [TsFileMetadataSize] 177 + 532| [magic tail] TsFile + 538| END of TsFile +---------------------------- IndexOfTimerseriesIndex Tree ----------------------------- +root + [MetadataIndex:LEAF_DEVICE] + └──────[root.device�,300] + [MetadataIndex:LEAF_MEASUREMENT] + └──────[value�,149] + └──────[root.中文,326] + [MetadataIndex:LEAF_MEASUREMENT] + └──────[温度,225] +---------------------------------- TsFile Sketch End ---------------------------------- diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023.0002.ndjson.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023.0002.ndjson.txt new file mode 100644 index 000000000..713fcfdff --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023.0002.ndjson.txt @@ -0,0 +1 @@ +{"time":"0","温度":"7"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023._manifest.json.txt new file mode 100644 index 000000000..1b0e89c01 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.ndjson","model":"tree","object":"root.device�","type":"ndjson","rows":"1"}, + {"file":"0002.ndjson","model":"tree","object":"root.中文","type":"ndjson","rows":"1"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsMeasurementsFlag/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsMeasurementsFlag/001.stderr.txt new file mode 100644 index 000000000..98542ef55 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsMeasurementsFlag/001.stderr.txt @@ -0,0 +1,27 @@ +Error: -m/--measurements is not valid for ls +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsNoHeader/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsNoHeader/001.stderr.txt new file mode 100644 index 000000000..f54992eee --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsNoHeader/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --no-header is not supported +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.MetaRejectsDeviceScopeFlag/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.MetaRejectsDeviceScopeFlag/001.stderr.txt new file mode 100644 index 000000000..7d63d1340 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.MetaRejectsDeviceScopeFlag/001.stderr.txt @@ -0,0 +1,27 @@ +Error: -d/--device is not valid for meta +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.MetaReportsFileHeaderVersionWithoutConstrainingReader/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.MetaReportsFileHeaderVersionWithoutConstrainingReader/001.stdout.txt new file mode 100644 index 000000000..6de67b3fe --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.MetaReportsFileHeaderVersionWithoutConstrainingReader/001.stdout.txt @@ -0,0 +1,2 @@ +size_bytes,format_version,model +408,3,tree diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.MultipleTagFiltersHonorAll/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.MultipleTagFiltersHonorAll/001.stdout.txt new file mode 100644 index 000000000..da10ca545 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.MultipleTagFiltersHonorAll/001.stdout.txt @@ -0,0 +1,2 @@ +time,id1,s1 +4,dev_b,50 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.OpenMissingFileReturnsFileError/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.OpenMissingFileReturnsFileError/001.stderr.txt new file mode 100644 index 000000000..230a7c09e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.OpenMissingFileReturnsFileError/001.stderr.txt @@ -0,0 +1 @@ +Error: cannot open definitely_missing.tsfile: cannot open file (code 28) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteColumnFlags/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteColumnFlags/001.stderr.txt new file mode 100644 index 000000000..d9fbd3cfd --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteColumnFlags/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --tag/--field are only valid for write +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteOnlyFlag/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteOnlyFlag/001.stderr.txt new file mode 100644 index 000000000..155397278 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteOnlyFlag/001.stderr.txt @@ -0,0 +1,27 @@ +Error: -o/--output is only valid for write +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/001.stdout.txt new file mode 100644 index 000000000..9d4aaa480 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/001.stdout.txt @@ -0,0 +1 @@ +time,id1,id2,s1 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/002.stderr.txt new file mode 100644 index 000000000..582c1d5d9 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/002.stderr.txt @@ -0,0 +1 @@ +Error: offset exceeds matched row count diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaRejectsMissingTableBeforeWritingOutput/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaRejectsMissingTableBeforeWritingOutput/001.stderr.txt new file mode 100644 index 000000000..156b9f371 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaRejectsMissingTableBeforeWritingOutput/001.stderr.txt @@ -0,0 +1 @@ +Error: table 'missing' does not exist diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaTableMeasurementFilterOnlyShowsRequestedColumn/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaTableMeasurementFilterOnlyShowsRequestedColumn/001.stdout.txt new file mode 100644 index 000000000..dc4127342 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaTableMeasurementFilterOnlyShowsRequestedColumn/001.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,data_type,encoding,compression +table,table1,s1,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsRejectsRowOnlyFlag/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsRejectsRowOnlyFlag/001.stderr.txt new file mode 100644 index 000000000..14bd56d6a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsRejectsRowOnlyFlag/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --start/--end are only valid for head/cat +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsCountAndTimeRange/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsCountAndTimeRange/001.stdout.txt new file mode 100644 index 000000000..97b472175 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsCountAndTimeRange/001.stdout.txt @@ -0,0 +1,2 @@ +model,object,tag.id1,tag.id2,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,table1,id1_field_1,id2_field_2,s1,INT64,5,0,0,4,0,40,0,40,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/002.roundtrip.txt new file mode 100644 index 000000000..928227ff2 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/002.roundtrip.txt @@ -0,0 +1,4 @@ +{"time":"1000","site":"beijing","temp":20,"note":"n0"} +{"time":"3000","site":"beijing","temp":22,"note":null} +{"time":"2000","site":"shanghai","temp":21,"note":"n1"} +{"time":"4000","site":"shanghai","temp":23,"note":"n3"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/003.stdout.txt new file mode 100644 index 000000000..3797394ac --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/003.stdout.txt @@ -0,0 +1,3 @@ +model,object,tag.site,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,sensors,beijing,note,TEXT,1,1,1000,1000,\N,\N,n0,n0,\N,statistics +table,sensors,shanghai,note,TEXT,2,0,2000,4000,\N,\N,n1,n3,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFilterRejectsFieldColumn/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFilterRejectsFieldColumn/001.stderr.txt new file mode 100644 index 000000000..46b260a00 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFilterRejectsFieldColumn/001.stderr.txt @@ -0,0 +1 @@ +Error: invalid tag filter column 's1' for table t1 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/001.stdout.txt new file mode 100644 index 000000000..6c176fc91 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/001.stdout.txt @@ -0,0 +1,2 @@ +time,id1,s1 +0,\N,10 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/002.stdout.txt new file mode 100644 index 000000000..dcf565abd --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/002.stdout.txt @@ -0,0 +1,2 @@ +time,id1,s1 +1,"",20 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/003.stdout.txt new file mode 100644 index 000000000..b78b997a5 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/003.stdout.txt @@ -0,0 +1,2 @@ +time,id1,s1 +2,null,30 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/004.stdout.txt new file mode 100644 index 000000000..fb49f40e6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/004.stdout.txt @@ -0,0 +1,5 @@ +time,id1,s1 +1,"",20 +3,dev_a,40 +4,dev_b,50 +2,null,30 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/005.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/005.stdout.txt new file mode 100644 index 000000000..6f6f8fa52 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/005.stdout.txt @@ -0,0 +1,4 @@ +time,id1,s1 +1,"",20 +4,dev_b,50 +2,null,30 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/001.stdout.txt new file mode 100644 index 000000000..ea7a7b581 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/001.stdout.txt @@ -0,0 +1 @@ +time,id1,s1 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/002.stdout.txt new file mode 100644 index 000000000..3998e974e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/002.stdout.txt @@ -0,0 +1,3 @@ +time,id1,s1 +3,dev_a,40 +4,dev_b,50 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/003.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/003.stderr.txt new file mode 100644 index 000000000..a95139a16 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/003.stderr.txt @@ -0,0 +1 @@ +Error: invalid regular expression for TAG 'id1' diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/001.stdout.txt new file mode 100644 index 000000000..664ad324b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/001.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +tree,root.test.d1,left,FIELD,3,\N,2,1,0,2,statistics +tree,root.test.d1,right,FIELD,3,\N,2,1,1,2,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/002.stdout.txt new file mode 100644 index 000000000..e6eb1c53b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/002.stdout.txt @@ -0,0 +1,3 @@ +model,object,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +tree,root.test.d1,left,INT32,2,1,0,2,10,20,10,20,30,statistics +tree,root.test.d1,right,BOOLEAN,2,1,1,2,\N,\N,true,false,1,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/001.stdout.txt new file mode 100644 index 000000000..c0b39a943 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/001.stdout.txt @@ -0,0 +1 @@ +{"time":"0","left":10} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/002.stdout.txt new file mode 100644 index 000000000..16e803fdf --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/002.stdout.txt @@ -0,0 +1,4 @@ +time,left,right +0,10,\N +1,\N,true +2,20,false diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsInt32Boundary/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsInt32Boundary/002.roundtrip.txt new file mode 100644 index 000000000..036a7c3a2 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsInt32Boundary/002.roundtrip.txt @@ -0,0 +1 @@ +{"time":"0","s1":2147483647} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsOneLeadingUtf8Bom/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsOneLeadingUtf8Bom/002.roundtrip.txt new file mode 100644 index 000000000..a2c9c40a0 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsOneLeadingUtf8Bom/002.roundtrip.txt @@ -0,0 +1 @@ +{"time":"0","s1":"1"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/002.roundtrip.txt new file mode 100644 index 000000000..86d0aacd8 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/002.roundtrip.txt @@ -0,0 +1,3 @@ +{"time":"1","id":"A","s1":"10"} +{"time":"2","id":"A","s1":"30"} +{"time":"1","id":"B","s1":"20"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/003.stdout.txt new file mode 100644 index 000000000..529e81036 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/003.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,t,id,TAG,3,2,3,0,1,2,scan +table,t,s1,FIELD,3,2,3,0,1,2,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt new file mode 100644 index 000000000..923bef916 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt @@ -0,0 +1,4 @@ +{"time":"0","site":"s\r\n1","message":"first\r\nsecond","note":"\"quoted\"\r\n\r\nlast"} +{"time":"1","site":"s\r\n1","message":"lf\nonly","note":"mixed\r\nand\nmore"} +{"time":"2","site":"s\r\n1","message":"carriage\rreturn","note":"\r\n"} +{"time":"3","site":"s\r\n1","message":"ends\r","note":"line\r\nend"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/004.stdout.txt new file mode 100644 index 000000000..bc39f1043 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/004.stdout.txt @@ -0,0 +1,17 @@ +time,site,message,note +0,"s +1","first +second","""quoted"" + +last" +1,"s +1","lf +only","mixed +and +more" +2,"s +1","carriage return"," +" +3,"s +1","ends ","line +end" diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt new file mode 100644 index 000000000..430f388cb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt @@ -0,0 +1,7 @@ +{"time":"6000","site":"\\site","note":"tag\\end"} +{"time":"7000","site":"\\site","note":"\\N"} +{"time":"1000","site":"s1","note":null} +{"time":"2000","site":"s1","note":"\\N"} +{"time":"3000","site":"s1","note":"\\leading"} +{"time":"4000","site":"s1","note":"back\\slash"} +{"time":"5000","site":"s1","note":"\\with,comma"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/004.stdout.txt new file mode 100644 index 000000000..653a9608d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/004.stdout.txt @@ -0,0 +1,8 @@ +time,site,note +6000,\\site,tag\end +7000,\\site,\\N +1000,s1,\N +2000,s1,\\N +3000,s1,\\leading +4000,s1,back\slash +5000,s1,"\\with,comma" diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/001.stderr.txt new file mode 100644 index 000000000..4f3ce1db1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/001.stderr.txt @@ -0,0 +1 @@ +Error: bad DATE '2024-1-1' (want YYYY-MM-DD) (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/002.stderr.txt new file mode 100644 index 000000000..07c119a96 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/002.stderr.txt @@ -0,0 +1 @@ +Error: bad DATE '2024-02-30' (want YYYY-MM-DD) (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/004.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/004.roundtrip.txt new file mode 100644 index 000000000..1b190dd7d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/004.roundtrip.txt @@ -0,0 +1 @@ +{"time":"0","s1":"2024-02-29"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDistinguishesCsvNullAndEmptyString/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDistinguishesCsvNullAndEmptyString/002.roundtrip.txt new file mode 100644 index 000000000..c4eb476be --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDistinguishesCsvNullAndEmptyString/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"1","id":"","n":"7"} +{"time":"0","id":"dev","n":null} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailureOnBadValueLeavesNoOutput/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailureOnBadValueLeavesNoOutput/001.stderr.txt new file mode 100644 index 000000000..c9b93d98f --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailureOnBadValueLeavesNoOutput/001.stderr.txt @@ -0,0 +1 @@ +Error: bad INT64 'notanumber' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailurePreservesExistingTarget/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailurePreservesExistingTarget/001.stderr.txt new file mode 100644 index 000000000..74afc0037 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailurePreservesExistingTarget/001.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_existing_out_296.tsfile' already exists; use --force to replace a regular file diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/002.roundtrip.txt new file mode 100644 index 000000000..df5d8b357 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"0","id1":"dev","note":"line one\nline two"} +{"time":"1","id1":"dev","note":"plain"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/003.stdout.txt new file mode 100644 index 000000000..44ed013f8 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/003.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,t1,id1,TAG,2,1,2,0,0,1,scan +table,t1,note,FIELD,2,1,2,0,0,1,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMapsEachColumnToItsOwnValue/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMapsEachColumnToItsOwnValue/002.roundtrip.txt new file mode 100644 index 000000000..5f937b2e1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMapsEachColumnToItsOwnValue/002.roundtrip.txt @@ -0,0 +1 @@ +{"time":"10","a_bool":true,"b_int":42,"c_long":"9000000000","d_float":1.5,"e_double":3.25,"f_str":"hello","g_ts":"1700000000000","h_date":"2024-06-15"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMissingColumnsIsUsageError/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMissingColumnsIsUsageError/001.stderr.txt new file mode 100644 index 000000000..fc79de682 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMissingColumnsIsUsageError/001.stderr.txt @@ -0,0 +1,27 @@ +Error: write requires at least one --field column +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/002.roundtrip.txt new file mode 100644 index 000000000..5b31b8821 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/002.roundtrip.txt @@ -0,0 +1,2500 @@ +{"time":"0","id":"dev","n":"0","note":"row0"} +{"time":"1","id":"dev","n":"3","note":"row1"} +{"time":"2","id":"dev","n":"6","note":"row2"} +{"time":"3","id":"dev","n":"9","note":"row3"} +{"time":"4","id":"dev","n":"12","note":"row4"} +{"time":"5","id":"dev","n":"15","note":"row5"} +{"time":"6","id":"dev","n":"18","note":"row6"} +{"time":"7","id":"dev","n":"21","note":"row7"} +{"time":"8","id":"dev","n":"24","note":"row8"} +{"time":"9","id":"dev","n":"27","note":"row9"} +{"time":"10","id":"dev","n":"30","note":"row10"} +{"time":"11","id":"dev","n":"33","note":"row11"} +{"time":"12","id":"dev","n":"36","note":"row12"} +{"time":"13","id":"dev","n":"39","note":"row13"} +{"time":"14","id":"dev","n":"42","note":"row14"} +{"time":"15","id":"dev","n":"45","note":"row15"} +{"time":"16","id":"dev","n":"48","note":"row16"} +{"time":"17","id":"dev","n":"51","note":"row17"} +{"time":"18","id":"dev","n":"54","note":"row18"} +{"time":"19","id":"dev","n":"57","note":"row19"} +{"time":"20","id":"dev","n":"60","note":"row20"} +{"time":"21","id":"dev","n":"63","note":"row21"} +{"time":"22","id":"dev","n":"66","note":"row22"} +{"time":"23","id":"dev","n":"69","note":"row23"} +{"time":"24","id":"dev","n":"72","note":"row24"} +{"time":"25","id":"dev","n":"75","note":"row25"} +{"time":"26","id":"dev","n":"78","note":"row26"} +{"time":"27","id":"dev","n":"81","note":"row27"} +{"time":"28","id":"dev","n":"84","note":"row28"} +{"time":"29","id":"dev","n":"87","note":"row29"} +{"time":"30","id":"dev","n":"90","note":"row30"} +{"time":"31","id":"dev","n":"93","note":"row31"} +{"time":"32","id":"dev","n":"96","note":"row32"} +{"time":"33","id":"dev","n":"99","note":"row33"} +{"time":"34","id":"dev","n":"102","note":"row34"} +{"time":"35","id":"dev","n":"105","note":"row35"} +{"time":"36","id":"dev","n":"108","note":"row36"} +{"time":"37","id":"dev","n":"111","note":"row37"} +{"time":"38","id":"dev","n":"114","note":"row38"} +{"time":"39","id":"dev","n":"117","note":"row39"} +{"time":"40","id":"dev","n":"120","note":"row40"} +{"time":"41","id":"dev","n":"123","note":"row41"} +{"time":"42","id":"dev","n":"126","note":"row42"} +{"time":"43","id":"dev","n":"129","note":"row43"} +{"time":"44","id":"dev","n":"132","note":"row44"} +{"time":"45","id":"dev","n":"135","note":"row45"} +{"time":"46","id":"dev","n":"138","note":"row46"} +{"time":"47","id":"dev","n":"141","note":"row47"} +{"time":"48","id":"dev","n":"144","note":"row48"} +{"time":"49","id":"dev","n":"147","note":"row49"} +{"time":"50","id":"dev","n":"150","note":"row50"} +{"time":"51","id":"dev","n":"153","note":"row51"} +{"time":"52","id":"dev","n":"156","note":"row52"} +{"time":"53","id":"dev","n":"159","note":"row53"} +{"time":"54","id":"dev","n":"162","note":"row54"} +{"time":"55","id":"dev","n":"165","note":"row55"} +{"time":"56","id":"dev","n":"168","note":"row56"} +{"time":"57","id":"dev","n":"171","note":"row57"} +{"time":"58","id":"dev","n":"174","note":"row58"} +{"time":"59","id":"dev","n":"177","note":"row59"} +{"time":"60","id":"dev","n":"180","note":"row60"} +{"time":"61","id":"dev","n":"183","note":"row61"} +{"time":"62","id":"dev","n":"186","note":"row62"} +{"time":"63","id":"dev","n":"189","note":"row63"} +{"time":"64","id":"dev","n":"192","note":"row64"} +{"time":"65","id":"dev","n":"195","note":"row65"} +{"time":"66","id":"dev","n":"198","note":"row66"} +{"time":"67","id":"dev","n":"201","note":"row67"} +{"time":"68","id":"dev","n":"204","note":"row68"} +{"time":"69","id":"dev","n":"207","note":"row69"} +{"time":"70","id":"dev","n":"210","note":"row70"} +{"time":"71","id":"dev","n":"213","note":"row71"} +{"time":"72","id":"dev","n":"216","note":"row72"} +{"time":"73","id":"dev","n":"219","note":"row73"} +{"time":"74","id":"dev","n":"222","note":"row74"} +{"time":"75","id":"dev","n":"225","note":"row75"} +{"time":"76","id":"dev","n":"228","note":"row76"} +{"time":"77","id":"dev","n":"231","note":"row77"} +{"time":"78","id":"dev","n":"234","note":"row78"} +{"time":"79","id":"dev","n":"237","note":"row79"} +{"time":"80","id":"dev","n":"240","note":"row80"} +{"time":"81","id":"dev","n":"243","note":"row81"} +{"time":"82","id":"dev","n":"246","note":"row82"} +{"time":"83","id":"dev","n":"249","note":"row83"} +{"time":"84","id":"dev","n":"252","note":"row84"} +{"time":"85","id":"dev","n":"255","note":"row85"} +{"time":"86","id":"dev","n":"258","note":"row86"} +{"time":"87","id":"dev","n":"261","note":"row87"} +{"time":"88","id":"dev","n":"264","note":"row88"} +{"time":"89","id":"dev","n":"267","note":"row89"} +{"time":"90","id":"dev","n":"270","note":"row90"} +{"time":"91","id":"dev","n":"273","note":"row91"} +{"time":"92","id":"dev","n":"276","note":"row92"} +{"time":"93","id":"dev","n":"279","note":"row93"} +{"time":"94","id":"dev","n":"282","note":"row94"} +{"time":"95","id":"dev","n":"285","note":"row95"} +{"time":"96","id":"dev","n":"288","note":"row96"} +{"time":"97","id":"dev","n":"291","note":"row97"} +{"time":"98","id":"dev","n":"294","note":"row98"} +{"time":"99","id":"dev","n":"297","note":"row99"} +{"time":"100","id":"dev","n":"300","note":"row100"} +{"time":"101","id":"dev","n":"303","note":"row101"} +{"time":"102","id":"dev","n":"306","note":"row102"} +{"time":"103","id":"dev","n":"309","note":"row103"} +{"time":"104","id":"dev","n":"312","note":"row104"} +{"time":"105","id":"dev","n":"315","note":"row105"} +{"time":"106","id":"dev","n":"318","note":"row106"} +{"time":"107","id":"dev","n":"321","note":"row107"} +{"time":"108","id":"dev","n":"324","note":"row108"} +{"time":"109","id":"dev","n":"327","note":"row109"} +{"time":"110","id":"dev","n":"330","note":"row110"} +{"time":"111","id":"dev","n":"333","note":"row111"} +{"time":"112","id":"dev","n":"336","note":"row112"} +{"time":"113","id":"dev","n":"339","note":"row113"} +{"time":"114","id":"dev","n":"342","note":"row114"} +{"time":"115","id":"dev","n":"345","note":"row115"} +{"time":"116","id":"dev","n":"348","note":"row116"} +{"time":"117","id":"dev","n":"351","note":"row117"} +{"time":"118","id":"dev","n":"354","note":"row118"} +{"time":"119","id":"dev","n":"357","note":"row119"} +{"time":"120","id":"dev","n":"360","note":"row120"} +{"time":"121","id":"dev","n":"363","note":"row121"} +{"time":"122","id":"dev","n":"366","note":"row122"} +{"time":"123","id":"dev","n":"369","note":"row123"} +{"time":"124","id":"dev","n":"372","note":"row124"} +{"time":"125","id":"dev","n":"375","note":"row125"} +{"time":"126","id":"dev","n":"378","note":"row126"} +{"time":"127","id":"dev","n":"381","note":"row127"} +{"time":"128","id":"dev","n":"384","note":"row128"} +{"time":"129","id":"dev","n":"387","note":"row129"} +{"time":"130","id":"dev","n":"390","note":"row130"} +{"time":"131","id":"dev","n":"393","note":"row131"} +{"time":"132","id":"dev","n":"396","note":"row132"} +{"time":"133","id":"dev","n":"399","note":"row133"} +{"time":"134","id":"dev","n":"402","note":"row134"} +{"time":"135","id":"dev","n":"405","note":"row135"} +{"time":"136","id":"dev","n":"408","note":"row136"} +{"time":"137","id":"dev","n":"411","note":"row137"} +{"time":"138","id":"dev","n":"414","note":"row138"} +{"time":"139","id":"dev","n":"417","note":"row139"} +{"time":"140","id":"dev","n":"420","note":"row140"} +{"time":"141","id":"dev","n":"423","note":"row141"} +{"time":"142","id":"dev","n":"426","note":"row142"} +{"time":"143","id":"dev","n":"429","note":"row143"} +{"time":"144","id":"dev","n":"432","note":"row144"} +{"time":"145","id":"dev","n":"435","note":"row145"} +{"time":"146","id":"dev","n":"438","note":"row146"} +{"time":"147","id":"dev","n":"441","note":"row147"} +{"time":"148","id":"dev","n":"444","note":"row148"} +{"time":"149","id":"dev","n":"447","note":"row149"} +{"time":"150","id":"dev","n":"450","note":"row150"} +{"time":"151","id":"dev","n":"453","note":"row151"} +{"time":"152","id":"dev","n":"456","note":"row152"} +{"time":"153","id":"dev","n":"459","note":"row153"} +{"time":"154","id":"dev","n":"462","note":"row154"} +{"time":"155","id":"dev","n":"465","note":"row155"} +{"time":"156","id":"dev","n":"468","note":"row156"} +{"time":"157","id":"dev","n":"471","note":"row157"} +{"time":"158","id":"dev","n":"474","note":"row158"} +{"time":"159","id":"dev","n":"477","note":"row159"} +{"time":"160","id":"dev","n":"480","note":"row160"} +{"time":"161","id":"dev","n":"483","note":"row161"} +{"time":"162","id":"dev","n":"486","note":"row162"} +{"time":"163","id":"dev","n":"489","note":"row163"} +{"time":"164","id":"dev","n":"492","note":"row164"} +{"time":"165","id":"dev","n":"495","note":"row165"} +{"time":"166","id":"dev","n":"498","note":"row166"} +{"time":"167","id":"dev","n":"501","note":"row167"} +{"time":"168","id":"dev","n":"504","note":"row168"} +{"time":"169","id":"dev","n":"507","note":"row169"} +{"time":"170","id":"dev","n":"510","note":"row170"} +{"time":"171","id":"dev","n":"513","note":"row171"} +{"time":"172","id":"dev","n":"516","note":"row172"} +{"time":"173","id":"dev","n":"519","note":"row173"} +{"time":"174","id":"dev","n":"522","note":"row174"} +{"time":"175","id":"dev","n":"525","note":"row175"} +{"time":"176","id":"dev","n":"528","note":"row176"} +{"time":"177","id":"dev","n":"531","note":"row177"} +{"time":"178","id":"dev","n":"534","note":"row178"} +{"time":"179","id":"dev","n":"537","note":"row179"} +{"time":"180","id":"dev","n":"540","note":"row180"} +{"time":"181","id":"dev","n":"543","note":"row181"} +{"time":"182","id":"dev","n":"546","note":"row182"} +{"time":"183","id":"dev","n":"549","note":"row183"} +{"time":"184","id":"dev","n":"552","note":"row184"} +{"time":"185","id":"dev","n":"555","note":"row185"} +{"time":"186","id":"dev","n":"558","note":"row186"} +{"time":"187","id":"dev","n":"561","note":"row187"} +{"time":"188","id":"dev","n":"564","note":"row188"} +{"time":"189","id":"dev","n":"567","note":"row189"} +{"time":"190","id":"dev","n":"570","note":"row190"} +{"time":"191","id":"dev","n":"573","note":"row191"} +{"time":"192","id":"dev","n":"576","note":"row192"} +{"time":"193","id":"dev","n":"579","note":"row193"} +{"time":"194","id":"dev","n":"582","note":"row194"} +{"time":"195","id":"dev","n":"585","note":"row195"} +{"time":"196","id":"dev","n":"588","note":"row196"} +{"time":"197","id":"dev","n":"591","note":"row197"} +{"time":"198","id":"dev","n":"594","note":"row198"} +{"time":"199","id":"dev","n":"597","note":"row199"} +{"time":"200","id":"dev","n":"600","note":"row200"} +{"time":"201","id":"dev","n":"603","note":"row201"} +{"time":"202","id":"dev","n":"606","note":"row202"} +{"time":"203","id":"dev","n":"609","note":"row203"} +{"time":"204","id":"dev","n":"612","note":"row204"} +{"time":"205","id":"dev","n":"615","note":"row205"} +{"time":"206","id":"dev","n":"618","note":"row206"} +{"time":"207","id":"dev","n":"621","note":"row207"} +{"time":"208","id":"dev","n":"624","note":"row208"} +{"time":"209","id":"dev","n":"627","note":"row209"} +{"time":"210","id":"dev","n":"630","note":"row210"} +{"time":"211","id":"dev","n":"633","note":"row211"} +{"time":"212","id":"dev","n":"636","note":"row212"} +{"time":"213","id":"dev","n":"639","note":"row213"} +{"time":"214","id":"dev","n":"642","note":"row214"} +{"time":"215","id":"dev","n":"645","note":"row215"} +{"time":"216","id":"dev","n":"648","note":"row216"} +{"time":"217","id":"dev","n":"651","note":"row217"} +{"time":"218","id":"dev","n":"654","note":"row218"} +{"time":"219","id":"dev","n":"657","note":"row219"} +{"time":"220","id":"dev","n":"660","note":"row220"} +{"time":"221","id":"dev","n":"663","note":"row221"} +{"time":"222","id":"dev","n":"666","note":"row222"} +{"time":"223","id":"dev","n":"669","note":"row223"} +{"time":"224","id":"dev","n":"672","note":"row224"} +{"time":"225","id":"dev","n":"675","note":"row225"} +{"time":"226","id":"dev","n":"678","note":"row226"} +{"time":"227","id":"dev","n":"681","note":"row227"} +{"time":"228","id":"dev","n":"684","note":"row228"} +{"time":"229","id":"dev","n":"687","note":"row229"} +{"time":"230","id":"dev","n":"690","note":"row230"} +{"time":"231","id":"dev","n":"693","note":"row231"} +{"time":"232","id":"dev","n":"696","note":"row232"} +{"time":"233","id":"dev","n":"699","note":"row233"} +{"time":"234","id":"dev","n":"702","note":"row234"} +{"time":"235","id":"dev","n":"705","note":"row235"} +{"time":"236","id":"dev","n":"708","note":"row236"} +{"time":"237","id":"dev","n":"711","note":"row237"} +{"time":"238","id":"dev","n":"714","note":"row238"} +{"time":"239","id":"dev","n":"717","note":"row239"} +{"time":"240","id":"dev","n":"720","note":"row240"} +{"time":"241","id":"dev","n":"723","note":"row241"} +{"time":"242","id":"dev","n":"726","note":"row242"} +{"time":"243","id":"dev","n":"729","note":"row243"} +{"time":"244","id":"dev","n":"732","note":"row244"} +{"time":"245","id":"dev","n":"735","note":"row245"} +{"time":"246","id":"dev","n":"738","note":"row246"} +{"time":"247","id":"dev","n":"741","note":"row247"} +{"time":"248","id":"dev","n":"744","note":"row248"} +{"time":"249","id":"dev","n":"747","note":"row249"} +{"time":"250","id":"dev","n":"750","note":"row250"} +{"time":"251","id":"dev","n":"753","note":"row251"} +{"time":"252","id":"dev","n":"756","note":"row252"} +{"time":"253","id":"dev","n":"759","note":"row253"} +{"time":"254","id":"dev","n":"762","note":"row254"} +{"time":"255","id":"dev","n":"765","note":"row255"} +{"time":"256","id":"dev","n":"768","note":"row256"} +{"time":"257","id":"dev","n":"771","note":"row257"} +{"time":"258","id":"dev","n":"774","note":"row258"} +{"time":"259","id":"dev","n":"777","note":"row259"} +{"time":"260","id":"dev","n":"780","note":"row260"} +{"time":"261","id":"dev","n":"783","note":"row261"} +{"time":"262","id":"dev","n":"786","note":"row262"} +{"time":"263","id":"dev","n":"789","note":"row263"} +{"time":"264","id":"dev","n":"792","note":"row264"} +{"time":"265","id":"dev","n":"795","note":"row265"} +{"time":"266","id":"dev","n":"798","note":"row266"} +{"time":"267","id":"dev","n":"801","note":"row267"} +{"time":"268","id":"dev","n":"804","note":"row268"} +{"time":"269","id":"dev","n":"807","note":"row269"} +{"time":"270","id":"dev","n":"810","note":"row270"} +{"time":"271","id":"dev","n":"813","note":"row271"} +{"time":"272","id":"dev","n":"816","note":"row272"} +{"time":"273","id":"dev","n":"819","note":"row273"} +{"time":"274","id":"dev","n":"822","note":"row274"} +{"time":"275","id":"dev","n":"825","note":"row275"} +{"time":"276","id":"dev","n":"828","note":"row276"} +{"time":"277","id":"dev","n":"831","note":"row277"} +{"time":"278","id":"dev","n":"834","note":"row278"} +{"time":"279","id":"dev","n":"837","note":"row279"} +{"time":"280","id":"dev","n":"840","note":"row280"} +{"time":"281","id":"dev","n":"843","note":"row281"} +{"time":"282","id":"dev","n":"846","note":"row282"} +{"time":"283","id":"dev","n":"849","note":"row283"} +{"time":"284","id":"dev","n":"852","note":"row284"} +{"time":"285","id":"dev","n":"855","note":"row285"} +{"time":"286","id":"dev","n":"858","note":"row286"} +{"time":"287","id":"dev","n":"861","note":"row287"} +{"time":"288","id":"dev","n":"864","note":"row288"} +{"time":"289","id":"dev","n":"867","note":"row289"} +{"time":"290","id":"dev","n":"870","note":"row290"} +{"time":"291","id":"dev","n":"873","note":"row291"} +{"time":"292","id":"dev","n":"876","note":"row292"} +{"time":"293","id":"dev","n":"879","note":"row293"} +{"time":"294","id":"dev","n":"882","note":"row294"} +{"time":"295","id":"dev","n":"885","note":"row295"} +{"time":"296","id":"dev","n":"888","note":"row296"} +{"time":"297","id":"dev","n":"891","note":"row297"} +{"time":"298","id":"dev","n":"894","note":"row298"} +{"time":"299","id":"dev","n":"897","note":"row299"} +{"time":"300","id":"dev","n":"900","note":"row300"} +{"time":"301","id":"dev","n":"903","note":"row301"} +{"time":"302","id":"dev","n":"906","note":"row302"} +{"time":"303","id":"dev","n":"909","note":"row303"} +{"time":"304","id":"dev","n":"912","note":"row304"} +{"time":"305","id":"dev","n":"915","note":"row305"} +{"time":"306","id":"dev","n":"918","note":"row306"} +{"time":"307","id":"dev","n":"921","note":"row307"} +{"time":"308","id":"dev","n":"924","note":"row308"} +{"time":"309","id":"dev","n":"927","note":"row309"} +{"time":"310","id":"dev","n":"930","note":"row310"} +{"time":"311","id":"dev","n":"933","note":"row311"} +{"time":"312","id":"dev","n":"936","note":"row312"} +{"time":"313","id":"dev","n":"939","note":"row313"} +{"time":"314","id":"dev","n":"942","note":"row314"} +{"time":"315","id":"dev","n":"945","note":"row315"} +{"time":"316","id":"dev","n":"948","note":"row316"} +{"time":"317","id":"dev","n":"951","note":"row317"} +{"time":"318","id":"dev","n":"954","note":"row318"} +{"time":"319","id":"dev","n":"957","note":"row319"} +{"time":"320","id":"dev","n":"960","note":"row320"} +{"time":"321","id":"dev","n":"963","note":"row321"} +{"time":"322","id":"dev","n":"966","note":"row322"} +{"time":"323","id":"dev","n":"969","note":"row323"} +{"time":"324","id":"dev","n":"972","note":"row324"} +{"time":"325","id":"dev","n":"975","note":"row325"} +{"time":"326","id":"dev","n":"978","note":"row326"} +{"time":"327","id":"dev","n":"981","note":"row327"} +{"time":"328","id":"dev","n":"984","note":"row328"} +{"time":"329","id":"dev","n":"987","note":"row329"} +{"time":"330","id":"dev","n":"990","note":"row330"} +{"time":"331","id":"dev","n":"993","note":"row331"} +{"time":"332","id":"dev","n":"996","note":"row332"} +{"time":"333","id":"dev","n":"999","note":"row333"} +{"time":"334","id":"dev","n":"1002","note":"row334"} +{"time":"335","id":"dev","n":"1005","note":"row335"} +{"time":"336","id":"dev","n":"1008","note":"row336"} +{"time":"337","id":"dev","n":"1011","note":"row337"} +{"time":"338","id":"dev","n":"1014","note":"row338"} +{"time":"339","id":"dev","n":"1017","note":"row339"} +{"time":"340","id":"dev","n":"1020","note":"row340"} +{"time":"341","id":"dev","n":"1023","note":"row341"} +{"time":"342","id":"dev","n":"1026","note":"row342"} +{"time":"343","id":"dev","n":"1029","note":"row343"} +{"time":"344","id":"dev","n":"1032","note":"row344"} +{"time":"345","id":"dev","n":"1035","note":"row345"} +{"time":"346","id":"dev","n":"1038","note":"row346"} +{"time":"347","id":"dev","n":"1041","note":"row347"} +{"time":"348","id":"dev","n":"1044","note":"row348"} +{"time":"349","id":"dev","n":"1047","note":"row349"} +{"time":"350","id":"dev","n":"1050","note":"row350"} +{"time":"351","id":"dev","n":"1053","note":"row351"} +{"time":"352","id":"dev","n":"1056","note":"row352"} +{"time":"353","id":"dev","n":"1059","note":"row353"} +{"time":"354","id":"dev","n":"1062","note":"row354"} +{"time":"355","id":"dev","n":"1065","note":"row355"} +{"time":"356","id":"dev","n":"1068","note":"row356"} +{"time":"357","id":"dev","n":"1071","note":"row357"} +{"time":"358","id":"dev","n":"1074","note":"row358"} +{"time":"359","id":"dev","n":"1077","note":"row359"} +{"time":"360","id":"dev","n":"1080","note":"row360"} +{"time":"361","id":"dev","n":"1083","note":"row361"} +{"time":"362","id":"dev","n":"1086","note":"row362"} +{"time":"363","id":"dev","n":"1089","note":"row363"} +{"time":"364","id":"dev","n":"1092","note":"row364"} +{"time":"365","id":"dev","n":"1095","note":"row365"} +{"time":"366","id":"dev","n":"1098","note":"row366"} +{"time":"367","id":"dev","n":"1101","note":"row367"} +{"time":"368","id":"dev","n":"1104","note":"row368"} +{"time":"369","id":"dev","n":"1107","note":"row369"} +{"time":"370","id":"dev","n":"1110","note":"row370"} +{"time":"371","id":"dev","n":"1113","note":"row371"} +{"time":"372","id":"dev","n":"1116","note":"row372"} +{"time":"373","id":"dev","n":"1119","note":"row373"} +{"time":"374","id":"dev","n":"1122","note":"row374"} +{"time":"375","id":"dev","n":"1125","note":"row375"} +{"time":"376","id":"dev","n":"1128","note":"row376"} +{"time":"377","id":"dev","n":"1131","note":"row377"} +{"time":"378","id":"dev","n":"1134","note":"row378"} +{"time":"379","id":"dev","n":"1137","note":"row379"} +{"time":"380","id":"dev","n":"1140","note":"row380"} +{"time":"381","id":"dev","n":"1143","note":"row381"} +{"time":"382","id":"dev","n":"1146","note":"row382"} +{"time":"383","id":"dev","n":"1149","note":"row383"} +{"time":"384","id":"dev","n":"1152","note":"row384"} +{"time":"385","id":"dev","n":"1155","note":"row385"} +{"time":"386","id":"dev","n":"1158","note":"row386"} +{"time":"387","id":"dev","n":"1161","note":"row387"} +{"time":"388","id":"dev","n":"1164","note":"row388"} +{"time":"389","id":"dev","n":"1167","note":"row389"} +{"time":"390","id":"dev","n":"1170","note":"row390"} +{"time":"391","id":"dev","n":"1173","note":"row391"} +{"time":"392","id":"dev","n":"1176","note":"row392"} +{"time":"393","id":"dev","n":"1179","note":"row393"} +{"time":"394","id":"dev","n":"1182","note":"row394"} +{"time":"395","id":"dev","n":"1185","note":"row395"} +{"time":"396","id":"dev","n":"1188","note":"row396"} +{"time":"397","id":"dev","n":"1191","note":"row397"} +{"time":"398","id":"dev","n":"1194","note":"row398"} +{"time":"399","id":"dev","n":"1197","note":"row399"} +{"time":"400","id":"dev","n":"1200","note":"row400"} +{"time":"401","id":"dev","n":"1203","note":"row401"} +{"time":"402","id":"dev","n":"1206","note":"row402"} +{"time":"403","id":"dev","n":"1209","note":"row403"} +{"time":"404","id":"dev","n":"1212","note":"row404"} +{"time":"405","id":"dev","n":"1215","note":"row405"} +{"time":"406","id":"dev","n":"1218","note":"row406"} +{"time":"407","id":"dev","n":"1221","note":"row407"} +{"time":"408","id":"dev","n":"1224","note":"row408"} +{"time":"409","id":"dev","n":"1227","note":"row409"} +{"time":"410","id":"dev","n":"1230","note":"row410"} +{"time":"411","id":"dev","n":"1233","note":"row411"} +{"time":"412","id":"dev","n":"1236","note":"row412"} +{"time":"413","id":"dev","n":"1239","note":"row413"} +{"time":"414","id":"dev","n":"1242","note":"row414"} +{"time":"415","id":"dev","n":"1245","note":"row415"} +{"time":"416","id":"dev","n":"1248","note":"row416"} +{"time":"417","id":"dev","n":"1251","note":"row417"} +{"time":"418","id":"dev","n":"1254","note":"row418"} +{"time":"419","id":"dev","n":"1257","note":"row419"} +{"time":"420","id":"dev","n":"1260","note":"row420"} +{"time":"421","id":"dev","n":"1263","note":"row421"} +{"time":"422","id":"dev","n":"1266","note":"row422"} +{"time":"423","id":"dev","n":"1269","note":"row423"} +{"time":"424","id":"dev","n":"1272","note":"row424"} +{"time":"425","id":"dev","n":"1275","note":"row425"} +{"time":"426","id":"dev","n":"1278","note":"row426"} +{"time":"427","id":"dev","n":"1281","note":"row427"} +{"time":"428","id":"dev","n":"1284","note":"row428"} +{"time":"429","id":"dev","n":"1287","note":"row429"} +{"time":"430","id":"dev","n":"1290","note":"row430"} +{"time":"431","id":"dev","n":"1293","note":"row431"} +{"time":"432","id":"dev","n":"1296","note":"row432"} +{"time":"433","id":"dev","n":"1299","note":"row433"} +{"time":"434","id":"dev","n":"1302","note":"row434"} +{"time":"435","id":"dev","n":"1305","note":"row435"} +{"time":"436","id":"dev","n":"1308","note":"row436"} +{"time":"437","id":"dev","n":"1311","note":"row437"} +{"time":"438","id":"dev","n":"1314","note":"row438"} +{"time":"439","id":"dev","n":"1317","note":"row439"} +{"time":"440","id":"dev","n":"1320","note":"row440"} +{"time":"441","id":"dev","n":"1323","note":"row441"} +{"time":"442","id":"dev","n":"1326","note":"row442"} +{"time":"443","id":"dev","n":"1329","note":"row443"} +{"time":"444","id":"dev","n":"1332","note":"row444"} +{"time":"445","id":"dev","n":"1335","note":"row445"} +{"time":"446","id":"dev","n":"1338","note":"row446"} +{"time":"447","id":"dev","n":"1341","note":"row447"} +{"time":"448","id":"dev","n":"1344","note":"row448"} +{"time":"449","id":"dev","n":"1347","note":"row449"} +{"time":"450","id":"dev","n":"1350","note":"row450"} +{"time":"451","id":"dev","n":"1353","note":"row451"} +{"time":"452","id":"dev","n":"1356","note":"row452"} +{"time":"453","id":"dev","n":"1359","note":"row453"} +{"time":"454","id":"dev","n":"1362","note":"row454"} +{"time":"455","id":"dev","n":"1365","note":"row455"} +{"time":"456","id":"dev","n":"1368","note":"row456"} +{"time":"457","id":"dev","n":"1371","note":"row457"} +{"time":"458","id":"dev","n":"1374","note":"row458"} +{"time":"459","id":"dev","n":"1377","note":"row459"} +{"time":"460","id":"dev","n":"1380","note":"row460"} +{"time":"461","id":"dev","n":"1383","note":"row461"} +{"time":"462","id":"dev","n":"1386","note":"row462"} +{"time":"463","id":"dev","n":"1389","note":"row463"} +{"time":"464","id":"dev","n":"1392","note":"row464"} +{"time":"465","id":"dev","n":"1395","note":"row465"} +{"time":"466","id":"dev","n":"1398","note":"row466"} +{"time":"467","id":"dev","n":"1401","note":"row467"} +{"time":"468","id":"dev","n":"1404","note":"row468"} +{"time":"469","id":"dev","n":"1407","note":"row469"} +{"time":"470","id":"dev","n":"1410","note":"row470"} +{"time":"471","id":"dev","n":"1413","note":"row471"} +{"time":"472","id":"dev","n":"1416","note":"row472"} +{"time":"473","id":"dev","n":"1419","note":"row473"} +{"time":"474","id":"dev","n":"1422","note":"row474"} +{"time":"475","id":"dev","n":"1425","note":"row475"} +{"time":"476","id":"dev","n":"1428","note":"row476"} +{"time":"477","id":"dev","n":"1431","note":"row477"} +{"time":"478","id":"dev","n":"1434","note":"row478"} +{"time":"479","id":"dev","n":"1437","note":"row479"} +{"time":"480","id":"dev","n":"1440","note":"row480"} +{"time":"481","id":"dev","n":"1443","note":"row481"} +{"time":"482","id":"dev","n":"1446","note":"row482"} +{"time":"483","id":"dev","n":"1449","note":"row483"} +{"time":"484","id":"dev","n":"1452","note":"row484"} +{"time":"485","id":"dev","n":"1455","note":"row485"} +{"time":"486","id":"dev","n":"1458","note":"row486"} +{"time":"487","id":"dev","n":"1461","note":"row487"} +{"time":"488","id":"dev","n":"1464","note":"row488"} +{"time":"489","id":"dev","n":"1467","note":"row489"} +{"time":"490","id":"dev","n":"1470","note":"row490"} +{"time":"491","id":"dev","n":"1473","note":"row491"} +{"time":"492","id":"dev","n":"1476","note":"row492"} +{"time":"493","id":"dev","n":"1479","note":"row493"} +{"time":"494","id":"dev","n":"1482","note":"row494"} +{"time":"495","id":"dev","n":"1485","note":"row495"} +{"time":"496","id":"dev","n":"1488","note":"row496"} +{"time":"497","id":"dev","n":"1491","note":"row497"} +{"time":"498","id":"dev","n":"1494","note":"row498"} +{"time":"499","id":"dev","n":"1497","note":"row499"} +{"time":"500","id":"dev","n":"1500","note":"row500"} +{"time":"501","id":"dev","n":"1503","note":"row501"} +{"time":"502","id":"dev","n":"1506","note":"row502"} +{"time":"503","id":"dev","n":"1509","note":"row503"} +{"time":"504","id":"dev","n":"1512","note":"row504"} +{"time":"505","id":"dev","n":"1515","note":"row505"} +{"time":"506","id":"dev","n":"1518","note":"row506"} +{"time":"507","id":"dev","n":"1521","note":"row507"} +{"time":"508","id":"dev","n":"1524","note":"row508"} +{"time":"509","id":"dev","n":"1527","note":"row509"} +{"time":"510","id":"dev","n":"1530","note":"row510"} +{"time":"511","id":"dev","n":"1533","note":"row511"} +{"time":"512","id":"dev","n":"1536","note":"row512"} +{"time":"513","id":"dev","n":"1539","note":"row513"} +{"time":"514","id":"dev","n":"1542","note":"row514"} +{"time":"515","id":"dev","n":"1545","note":"row515"} +{"time":"516","id":"dev","n":"1548","note":"row516"} +{"time":"517","id":"dev","n":"1551","note":"row517"} +{"time":"518","id":"dev","n":"1554","note":"row518"} +{"time":"519","id":"dev","n":"1557","note":"row519"} +{"time":"520","id":"dev","n":"1560","note":"row520"} +{"time":"521","id":"dev","n":"1563","note":"row521"} +{"time":"522","id":"dev","n":"1566","note":"row522"} +{"time":"523","id":"dev","n":"1569","note":"row523"} +{"time":"524","id":"dev","n":"1572","note":"row524"} +{"time":"525","id":"dev","n":"1575","note":"row525"} +{"time":"526","id":"dev","n":"1578","note":"row526"} +{"time":"527","id":"dev","n":"1581","note":"row527"} +{"time":"528","id":"dev","n":"1584","note":"row528"} +{"time":"529","id":"dev","n":"1587","note":"row529"} +{"time":"530","id":"dev","n":"1590","note":"row530"} +{"time":"531","id":"dev","n":"1593","note":"row531"} +{"time":"532","id":"dev","n":"1596","note":"row532"} +{"time":"533","id":"dev","n":"1599","note":"row533"} +{"time":"534","id":"dev","n":"1602","note":"row534"} +{"time":"535","id":"dev","n":"1605","note":"row535"} +{"time":"536","id":"dev","n":"1608","note":"row536"} +{"time":"537","id":"dev","n":"1611","note":"row537"} +{"time":"538","id":"dev","n":"1614","note":"row538"} +{"time":"539","id":"dev","n":"1617","note":"row539"} +{"time":"540","id":"dev","n":"1620","note":"row540"} +{"time":"541","id":"dev","n":"1623","note":"row541"} +{"time":"542","id":"dev","n":"1626","note":"row542"} +{"time":"543","id":"dev","n":"1629","note":"row543"} +{"time":"544","id":"dev","n":"1632","note":"row544"} +{"time":"545","id":"dev","n":"1635","note":"row545"} +{"time":"546","id":"dev","n":"1638","note":"row546"} +{"time":"547","id":"dev","n":"1641","note":"row547"} +{"time":"548","id":"dev","n":"1644","note":"row548"} +{"time":"549","id":"dev","n":"1647","note":"row549"} +{"time":"550","id":"dev","n":"1650","note":"row550"} +{"time":"551","id":"dev","n":"1653","note":"row551"} +{"time":"552","id":"dev","n":"1656","note":"row552"} +{"time":"553","id":"dev","n":"1659","note":"row553"} +{"time":"554","id":"dev","n":"1662","note":"row554"} +{"time":"555","id":"dev","n":"1665","note":"row555"} +{"time":"556","id":"dev","n":"1668","note":"row556"} +{"time":"557","id":"dev","n":"1671","note":"row557"} +{"time":"558","id":"dev","n":"1674","note":"row558"} +{"time":"559","id":"dev","n":"1677","note":"row559"} +{"time":"560","id":"dev","n":"1680","note":"row560"} +{"time":"561","id":"dev","n":"1683","note":"row561"} +{"time":"562","id":"dev","n":"1686","note":"row562"} +{"time":"563","id":"dev","n":"1689","note":"row563"} +{"time":"564","id":"dev","n":"1692","note":"row564"} +{"time":"565","id":"dev","n":"1695","note":"row565"} +{"time":"566","id":"dev","n":"1698","note":"row566"} +{"time":"567","id":"dev","n":"1701","note":"row567"} +{"time":"568","id":"dev","n":"1704","note":"row568"} +{"time":"569","id":"dev","n":"1707","note":"row569"} +{"time":"570","id":"dev","n":"1710","note":"row570"} +{"time":"571","id":"dev","n":"1713","note":"row571"} +{"time":"572","id":"dev","n":"1716","note":"row572"} +{"time":"573","id":"dev","n":"1719","note":"row573"} +{"time":"574","id":"dev","n":"1722","note":"row574"} +{"time":"575","id":"dev","n":"1725","note":"row575"} +{"time":"576","id":"dev","n":"1728","note":"row576"} +{"time":"577","id":"dev","n":"1731","note":"row577"} +{"time":"578","id":"dev","n":"1734","note":"row578"} +{"time":"579","id":"dev","n":"1737","note":"row579"} +{"time":"580","id":"dev","n":"1740","note":"row580"} +{"time":"581","id":"dev","n":"1743","note":"row581"} +{"time":"582","id":"dev","n":"1746","note":"row582"} +{"time":"583","id":"dev","n":"1749","note":"row583"} +{"time":"584","id":"dev","n":"1752","note":"row584"} +{"time":"585","id":"dev","n":"1755","note":"row585"} +{"time":"586","id":"dev","n":"1758","note":"row586"} +{"time":"587","id":"dev","n":"1761","note":"row587"} +{"time":"588","id":"dev","n":"1764","note":"row588"} +{"time":"589","id":"dev","n":"1767","note":"row589"} +{"time":"590","id":"dev","n":"1770","note":"row590"} +{"time":"591","id":"dev","n":"1773","note":"row591"} +{"time":"592","id":"dev","n":"1776","note":"row592"} +{"time":"593","id":"dev","n":"1779","note":"row593"} +{"time":"594","id":"dev","n":"1782","note":"row594"} +{"time":"595","id":"dev","n":"1785","note":"row595"} +{"time":"596","id":"dev","n":"1788","note":"row596"} +{"time":"597","id":"dev","n":"1791","note":"row597"} +{"time":"598","id":"dev","n":"1794","note":"row598"} +{"time":"599","id":"dev","n":"1797","note":"row599"} +{"time":"600","id":"dev","n":"1800","note":"row600"} +{"time":"601","id":"dev","n":"1803","note":"row601"} +{"time":"602","id":"dev","n":"1806","note":"row602"} +{"time":"603","id":"dev","n":"1809","note":"row603"} +{"time":"604","id":"dev","n":"1812","note":"row604"} +{"time":"605","id":"dev","n":"1815","note":"row605"} +{"time":"606","id":"dev","n":"1818","note":"row606"} +{"time":"607","id":"dev","n":"1821","note":"row607"} +{"time":"608","id":"dev","n":"1824","note":"row608"} +{"time":"609","id":"dev","n":"1827","note":"row609"} +{"time":"610","id":"dev","n":"1830","note":"row610"} +{"time":"611","id":"dev","n":"1833","note":"row611"} +{"time":"612","id":"dev","n":"1836","note":"row612"} +{"time":"613","id":"dev","n":"1839","note":"row613"} +{"time":"614","id":"dev","n":"1842","note":"row614"} +{"time":"615","id":"dev","n":"1845","note":"row615"} +{"time":"616","id":"dev","n":"1848","note":"row616"} +{"time":"617","id":"dev","n":"1851","note":"row617"} +{"time":"618","id":"dev","n":"1854","note":"row618"} +{"time":"619","id":"dev","n":"1857","note":"row619"} +{"time":"620","id":"dev","n":"1860","note":"row620"} +{"time":"621","id":"dev","n":"1863","note":"row621"} +{"time":"622","id":"dev","n":"1866","note":"row622"} +{"time":"623","id":"dev","n":"1869","note":"row623"} +{"time":"624","id":"dev","n":"1872","note":"row624"} +{"time":"625","id":"dev","n":"1875","note":"row625"} +{"time":"626","id":"dev","n":"1878","note":"row626"} +{"time":"627","id":"dev","n":"1881","note":"row627"} +{"time":"628","id":"dev","n":"1884","note":"row628"} +{"time":"629","id":"dev","n":"1887","note":"row629"} +{"time":"630","id":"dev","n":"1890","note":"row630"} +{"time":"631","id":"dev","n":"1893","note":"row631"} +{"time":"632","id":"dev","n":"1896","note":"row632"} +{"time":"633","id":"dev","n":"1899","note":"row633"} +{"time":"634","id":"dev","n":"1902","note":"row634"} +{"time":"635","id":"dev","n":"1905","note":"row635"} +{"time":"636","id":"dev","n":"1908","note":"row636"} +{"time":"637","id":"dev","n":"1911","note":"row637"} +{"time":"638","id":"dev","n":"1914","note":"row638"} +{"time":"639","id":"dev","n":"1917","note":"row639"} +{"time":"640","id":"dev","n":"1920","note":"row640"} +{"time":"641","id":"dev","n":"1923","note":"row641"} +{"time":"642","id":"dev","n":"1926","note":"row642"} +{"time":"643","id":"dev","n":"1929","note":"row643"} +{"time":"644","id":"dev","n":"1932","note":"row644"} +{"time":"645","id":"dev","n":"1935","note":"row645"} +{"time":"646","id":"dev","n":"1938","note":"row646"} +{"time":"647","id":"dev","n":"1941","note":"row647"} +{"time":"648","id":"dev","n":"1944","note":"row648"} +{"time":"649","id":"dev","n":"1947","note":"row649"} +{"time":"650","id":"dev","n":"1950","note":"row650"} +{"time":"651","id":"dev","n":"1953","note":"row651"} +{"time":"652","id":"dev","n":"1956","note":"row652"} +{"time":"653","id":"dev","n":"1959","note":"row653"} +{"time":"654","id":"dev","n":"1962","note":"row654"} +{"time":"655","id":"dev","n":"1965","note":"row655"} +{"time":"656","id":"dev","n":"1968","note":"row656"} +{"time":"657","id":"dev","n":"1971","note":"row657"} +{"time":"658","id":"dev","n":"1974","note":"row658"} +{"time":"659","id":"dev","n":"1977","note":"row659"} +{"time":"660","id":"dev","n":"1980","note":"row660"} +{"time":"661","id":"dev","n":"1983","note":"row661"} +{"time":"662","id":"dev","n":"1986","note":"row662"} +{"time":"663","id":"dev","n":"1989","note":"row663"} +{"time":"664","id":"dev","n":"1992","note":"row664"} +{"time":"665","id":"dev","n":"1995","note":"row665"} +{"time":"666","id":"dev","n":"1998","note":"row666"} +{"time":"667","id":"dev","n":"2001","note":"row667"} +{"time":"668","id":"dev","n":"2004","note":"row668"} +{"time":"669","id":"dev","n":"2007","note":"row669"} +{"time":"670","id":"dev","n":"2010","note":"row670"} +{"time":"671","id":"dev","n":"2013","note":"row671"} +{"time":"672","id":"dev","n":"2016","note":"row672"} +{"time":"673","id":"dev","n":"2019","note":"row673"} +{"time":"674","id":"dev","n":"2022","note":"row674"} +{"time":"675","id":"dev","n":"2025","note":"row675"} +{"time":"676","id":"dev","n":"2028","note":"row676"} +{"time":"677","id":"dev","n":"2031","note":"row677"} +{"time":"678","id":"dev","n":"2034","note":"row678"} +{"time":"679","id":"dev","n":"2037","note":"row679"} +{"time":"680","id":"dev","n":"2040","note":"row680"} +{"time":"681","id":"dev","n":"2043","note":"row681"} +{"time":"682","id":"dev","n":"2046","note":"row682"} +{"time":"683","id":"dev","n":"2049","note":"row683"} +{"time":"684","id":"dev","n":"2052","note":"row684"} +{"time":"685","id":"dev","n":"2055","note":"row685"} +{"time":"686","id":"dev","n":"2058","note":"row686"} +{"time":"687","id":"dev","n":"2061","note":"row687"} +{"time":"688","id":"dev","n":"2064","note":"row688"} +{"time":"689","id":"dev","n":"2067","note":"row689"} +{"time":"690","id":"dev","n":"2070","note":"row690"} +{"time":"691","id":"dev","n":"2073","note":"row691"} +{"time":"692","id":"dev","n":"2076","note":"row692"} +{"time":"693","id":"dev","n":"2079","note":"row693"} +{"time":"694","id":"dev","n":"2082","note":"row694"} +{"time":"695","id":"dev","n":"2085","note":"row695"} +{"time":"696","id":"dev","n":"2088","note":"row696"} +{"time":"697","id":"dev","n":"2091","note":"row697"} +{"time":"698","id":"dev","n":"2094","note":"row698"} +{"time":"699","id":"dev","n":"2097","note":"row699"} +{"time":"700","id":"dev","n":"2100","note":"row700"} +{"time":"701","id":"dev","n":"2103","note":"row701"} +{"time":"702","id":"dev","n":"2106","note":"row702"} +{"time":"703","id":"dev","n":"2109","note":"row703"} +{"time":"704","id":"dev","n":"2112","note":"row704"} +{"time":"705","id":"dev","n":"2115","note":"row705"} +{"time":"706","id":"dev","n":"2118","note":"row706"} +{"time":"707","id":"dev","n":"2121","note":"row707"} +{"time":"708","id":"dev","n":"2124","note":"row708"} +{"time":"709","id":"dev","n":"2127","note":"row709"} +{"time":"710","id":"dev","n":"2130","note":"row710"} +{"time":"711","id":"dev","n":"2133","note":"row711"} +{"time":"712","id":"dev","n":"2136","note":"row712"} +{"time":"713","id":"dev","n":"2139","note":"row713"} +{"time":"714","id":"dev","n":"2142","note":"row714"} +{"time":"715","id":"dev","n":"2145","note":"row715"} +{"time":"716","id":"dev","n":"2148","note":"row716"} +{"time":"717","id":"dev","n":"2151","note":"row717"} +{"time":"718","id":"dev","n":"2154","note":"row718"} +{"time":"719","id":"dev","n":"2157","note":"row719"} +{"time":"720","id":"dev","n":"2160","note":"row720"} +{"time":"721","id":"dev","n":"2163","note":"row721"} +{"time":"722","id":"dev","n":"2166","note":"row722"} +{"time":"723","id":"dev","n":"2169","note":"row723"} +{"time":"724","id":"dev","n":"2172","note":"row724"} +{"time":"725","id":"dev","n":"2175","note":"row725"} +{"time":"726","id":"dev","n":"2178","note":"row726"} +{"time":"727","id":"dev","n":"2181","note":"row727"} +{"time":"728","id":"dev","n":"2184","note":"row728"} +{"time":"729","id":"dev","n":"2187","note":"row729"} +{"time":"730","id":"dev","n":"2190","note":"row730"} +{"time":"731","id":"dev","n":"2193","note":"row731"} +{"time":"732","id":"dev","n":"2196","note":"row732"} +{"time":"733","id":"dev","n":"2199","note":"row733"} +{"time":"734","id":"dev","n":"2202","note":"row734"} +{"time":"735","id":"dev","n":"2205","note":"row735"} +{"time":"736","id":"dev","n":"2208","note":"row736"} +{"time":"737","id":"dev","n":"2211","note":"row737"} +{"time":"738","id":"dev","n":"2214","note":"row738"} +{"time":"739","id":"dev","n":"2217","note":"row739"} +{"time":"740","id":"dev","n":"2220","note":"row740"} +{"time":"741","id":"dev","n":"2223","note":"row741"} +{"time":"742","id":"dev","n":"2226","note":"row742"} +{"time":"743","id":"dev","n":"2229","note":"row743"} +{"time":"744","id":"dev","n":"2232","note":"row744"} +{"time":"745","id":"dev","n":"2235","note":"row745"} +{"time":"746","id":"dev","n":"2238","note":"row746"} +{"time":"747","id":"dev","n":"2241","note":"row747"} +{"time":"748","id":"dev","n":"2244","note":"row748"} +{"time":"749","id":"dev","n":"2247","note":"row749"} +{"time":"750","id":"dev","n":"2250","note":"row750"} +{"time":"751","id":"dev","n":"2253","note":"row751"} +{"time":"752","id":"dev","n":"2256","note":"row752"} +{"time":"753","id":"dev","n":"2259","note":"row753"} +{"time":"754","id":"dev","n":"2262","note":"row754"} +{"time":"755","id":"dev","n":"2265","note":"row755"} +{"time":"756","id":"dev","n":"2268","note":"row756"} +{"time":"757","id":"dev","n":"2271","note":"row757"} +{"time":"758","id":"dev","n":"2274","note":"row758"} +{"time":"759","id":"dev","n":"2277","note":"row759"} +{"time":"760","id":"dev","n":"2280","note":"row760"} +{"time":"761","id":"dev","n":"2283","note":"row761"} +{"time":"762","id":"dev","n":"2286","note":"row762"} +{"time":"763","id":"dev","n":"2289","note":"row763"} +{"time":"764","id":"dev","n":"2292","note":"row764"} +{"time":"765","id":"dev","n":"2295","note":"row765"} +{"time":"766","id":"dev","n":"2298","note":"row766"} +{"time":"767","id":"dev","n":"2301","note":"row767"} +{"time":"768","id":"dev","n":"2304","note":"row768"} +{"time":"769","id":"dev","n":"2307","note":"row769"} +{"time":"770","id":"dev","n":"2310","note":"row770"} +{"time":"771","id":"dev","n":"2313","note":"row771"} +{"time":"772","id":"dev","n":"2316","note":"row772"} +{"time":"773","id":"dev","n":"2319","note":"row773"} +{"time":"774","id":"dev","n":"2322","note":"row774"} +{"time":"775","id":"dev","n":"2325","note":"row775"} +{"time":"776","id":"dev","n":"2328","note":"row776"} +{"time":"777","id":"dev","n":"2331","note":"row777"} +{"time":"778","id":"dev","n":"2334","note":"row778"} +{"time":"779","id":"dev","n":"2337","note":"row779"} +{"time":"780","id":"dev","n":"2340","note":"row780"} +{"time":"781","id":"dev","n":"2343","note":"row781"} +{"time":"782","id":"dev","n":"2346","note":"row782"} +{"time":"783","id":"dev","n":"2349","note":"row783"} +{"time":"784","id":"dev","n":"2352","note":"row784"} +{"time":"785","id":"dev","n":"2355","note":"row785"} +{"time":"786","id":"dev","n":"2358","note":"row786"} +{"time":"787","id":"dev","n":"2361","note":"row787"} +{"time":"788","id":"dev","n":"2364","note":"row788"} +{"time":"789","id":"dev","n":"2367","note":"row789"} +{"time":"790","id":"dev","n":"2370","note":"row790"} +{"time":"791","id":"dev","n":"2373","note":"row791"} +{"time":"792","id":"dev","n":"2376","note":"row792"} +{"time":"793","id":"dev","n":"2379","note":"row793"} +{"time":"794","id":"dev","n":"2382","note":"row794"} +{"time":"795","id":"dev","n":"2385","note":"row795"} +{"time":"796","id":"dev","n":"2388","note":"row796"} +{"time":"797","id":"dev","n":"2391","note":"row797"} +{"time":"798","id":"dev","n":"2394","note":"row798"} +{"time":"799","id":"dev","n":"2397","note":"row799"} +{"time":"800","id":"dev","n":"2400","note":"row800"} +{"time":"801","id":"dev","n":"2403","note":"row801"} +{"time":"802","id":"dev","n":"2406","note":"row802"} +{"time":"803","id":"dev","n":"2409","note":"row803"} +{"time":"804","id":"dev","n":"2412","note":"row804"} +{"time":"805","id":"dev","n":"2415","note":"row805"} +{"time":"806","id":"dev","n":"2418","note":"row806"} +{"time":"807","id":"dev","n":"2421","note":"row807"} +{"time":"808","id":"dev","n":"2424","note":"row808"} +{"time":"809","id":"dev","n":"2427","note":"row809"} +{"time":"810","id":"dev","n":"2430","note":"row810"} +{"time":"811","id":"dev","n":"2433","note":"row811"} +{"time":"812","id":"dev","n":"2436","note":"row812"} +{"time":"813","id":"dev","n":"2439","note":"row813"} +{"time":"814","id":"dev","n":"2442","note":"row814"} +{"time":"815","id":"dev","n":"2445","note":"row815"} +{"time":"816","id":"dev","n":"2448","note":"row816"} +{"time":"817","id":"dev","n":"2451","note":"row817"} +{"time":"818","id":"dev","n":"2454","note":"row818"} +{"time":"819","id":"dev","n":"2457","note":"row819"} +{"time":"820","id":"dev","n":"2460","note":"row820"} +{"time":"821","id":"dev","n":"2463","note":"row821"} +{"time":"822","id":"dev","n":"2466","note":"row822"} +{"time":"823","id":"dev","n":"2469","note":"row823"} +{"time":"824","id":"dev","n":"2472","note":"row824"} +{"time":"825","id":"dev","n":"2475","note":"row825"} +{"time":"826","id":"dev","n":"2478","note":"row826"} +{"time":"827","id":"dev","n":"2481","note":"row827"} +{"time":"828","id":"dev","n":"2484","note":"row828"} +{"time":"829","id":"dev","n":"2487","note":"row829"} +{"time":"830","id":"dev","n":"2490","note":"row830"} +{"time":"831","id":"dev","n":"2493","note":"row831"} +{"time":"832","id":"dev","n":"2496","note":"row832"} +{"time":"833","id":"dev","n":"2499","note":"row833"} +{"time":"834","id":"dev","n":"2502","note":"row834"} +{"time":"835","id":"dev","n":"2505","note":"row835"} +{"time":"836","id":"dev","n":"2508","note":"row836"} +{"time":"837","id":"dev","n":"2511","note":"row837"} +{"time":"838","id":"dev","n":"2514","note":"row838"} +{"time":"839","id":"dev","n":"2517","note":"row839"} +{"time":"840","id":"dev","n":"2520","note":"row840"} +{"time":"841","id":"dev","n":"2523","note":"row841"} +{"time":"842","id":"dev","n":"2526","note":"row842"} +{"time":"843","id":"dev","n":"2529","note":"row843"} +{"time":"844","id":"dev","n":"2532","note":"row844"} +{"time":"845","id":"dev","n":"2535","note":"row845"} +{"time":"846","id":"dev","n":"2538","note":"row846"} +{"time":"847","id":"dev","n":"2541","note":"row847"} +{"time":"848","id":"dev","n":"2544","note":"row848"} +{"time":"849","id":"dev","n":"2547","note":"row849"} +{"time":"850","id":"dev","n":"2550","note":"row850"} +{"time":"851","id":"dev","n":"2553","note":"row851"} +{"time":"852","id":"dev","n":"2556","note":"row852"} +{"time":"853","id":"dev","n":"2559","note":"row853"} +{"time":"854","id":"dev","n":"2562","note":"row854"} +{"time":"855","id":"dev","n":"2565","note":"row855"} +{"time":"856","id":"dev","n":"2568","note":"row856"} +{"time":"857","id":"dev","n":"2571","note":"row857"} +{"time":"858","id":"dev","n":"2574","note":"row858"} +{"time":"859","id":"dev","n":"2577","note":"row859"} +{"time":"860","id":"dev","n":"2580","note":"row860"} +{"time":"861","id":"dev","n":"2583","note":"row861"} +{"time":"862","id":"dev","n":"2586","note":"row862"} +{"time":"863","id":"dev","n":"2589","note":"row863"} +{"time":"864","id":"dev","n":"2592","note":"row864"} +{"time":"865","id":"dev","n":"2595","note":"row865"} +{"time":"866","id":"dev","n":"2598","note":"row866"} +{"time":"867","id":"dev","n":"2601","note":"row867"} +{"time":"868","id":"dev","n":"2604","note":"row868"} +{"time":"869","id":"dev","n":"2607","note":"row869"} +{"time":"870","id":"dev","n":"2610","note":"row870"} +{"time":"871","id":"dev","n":"2613","note":"row871"} +{"time":"872","id":"dev","n":"2616","note":"row872"} +{"time":"873","id":"dev","n":"2619","note":"row873"} +{"time":"874","id":"dev","n":"2622","note":"row874"} +{"time":"875","id":"dev","n":"2625","note":"row875"} +{"time":"876","id":"dev","n":"2628","note":"row876"} +{"time":"877","id":"dev","n":"2631","note":"row877"} +{"time":"878","id":"dev","n":"2634","note":"row878"} +{"time":"879","id":"dev","n":"2637","note":"row879"} +{"time":"880","id":"dev","n":"2640","note":"row880"} +{"time":"881","id":"dev","n":"2643","note":"row881"} +{"time":"882","id":"dev","n":"2646","note":"row882"} +{"time":"883","id":"dev","n":"2649","note":"row883"} +{"time":"884","id":"dev","n":"2652","note":"row884"} +{"time":"885","id":"dev","n":"2655","note":"row885"} +{"time":"886","id":"dev","n":"2658","note":"row886"} +{"time":"887","id":"dev","n":"2661","note":"row887"} +{"time":"888","id":"dev","n":"2664","note":"row888"} +{"time":"889","id":"dev","n":"2667","note":"row889"} +{"time":"890","id":"dev","n":"2670","note":"row890"} +{"time":"891","id":"dev","n":"2673","note":"row891"} +{"time":"892","id":"dev","n":"2676","note":"row892"} +{"time":"893","id":"dev","n":"2679","note":"row893"} +{"time":"894","id":"dev","n":"2682","note":"row894"} +{"time":"895","id":"dev","n":"2685","note":"row895"} +{"time":"896","id":"dev","n":"2688","note":"row896"} +{"time":"897","id":"dev","n":"2691","note":"row897"} +{"time":"898","id":"dev","n":"2694","note":"row898"} +{"time":"899","id":"dev","n":"2697","note":"row899"} +{"time":"900","id":"dev","n":"2700","note":"row900"} +{"time":"901","id":"dev","n":"2703","note":"row901"} +{"time":"902","id":"dev","n":"2706","note":"row902"} +{"time":"903","id":"dev","n":"2709","note":"row903"} +{"time":"904","id":"dev","n":"2712","note":"row904"} +{"time":"905","id":"dev","n":"2715","note":"row905"} +{"time":"906","id":"dev","n":"2718","note":"row906"} +{"time":"907","id":"dev","n":"2721","note":"row907"} +{"time":"908","id":"dev","n":"2724","note":"row908"} +{"time":"909","id":"dev","n":"2727","note":"row909"} +{"time":"910","id":"dev","n":"2730","note":"row910"} +{"time":"911","id":"dev","n":"2733","note":"row911"} +{"time":"912","id":"dev","n":"2736","note":"row912"} +{"time":"913","id":"dev","n":"2739","note":"row913"} +{"time":"914","id":"dev","n":"2742","note":"row914"} +{"time":"915","id":"dev","n":"2745","note":"row915"} +{"time":"916","id":"dev","n":"2748","note":"row916"} +{"time":"917","id":"dev","n":"2751","note":"row917"} +{"time":"918","id":"dev","n":"2754","note":"row918"} +{"time":"919","id":"dev","n":"2757","note":"row919"} +{"time":"920","id":"dev","n":"2760","note":"row920"} +{"time":"921","id":"dev","n":"2763","note":"row921"} +{"time":"922","id":"dev","n":"2766","note":"row922"} +{"time":"923","id":"dev","n":"2769","note":"row923"} +{"time":"924","id":"dev","n":"2772","note":"row924"} +{"time":"925","id":"dev","n":"2775","note":"row925"} +{"time":"926","id":"dev","n":"2778","note":"row926"} +{"time":"927","id":"dev","n":"2781","note":"row927"} +{"time":"928","id":"dev","n":"2784","note":"row928"} +{"time":"929","id":"dev","n":"2787","note":"row929"} +{"time":"930","id":"dev","n":"2790","note":"row930"} +{"time":"931","id":"dev","n":"2793","note":"row931"} +{"time":"932","id":"dev","n":"2796","note":"row932"} +{"time":"933","id":"dev","n":"2799","note":"row933"} +{"time":"934","id":"dev","n":"2802","note":"row934"} +{"time":"935","id":"dev","n":"2805","note":"row935"} +{"time":"936","id":"dev","n":"2808","note":"row936"} +{"time":"937","id":"dev","n":"2811","note":"row937"} +{"time":"938","id":"dev","n":"2814","note":"row938"} +{"time":"939","id":"dev","n":"2817","note":"row939"} +{"time":"940","id":"dev","n":"2820","note":"row940"} +{"time":"941","id":"dev","n":"2823","note":"row941"} +{"time":"942","id":"dev","n":"2826","note":"row942"} +{"time":"943","id":"dev","n":"2829","note":"row943"} +{"time":"944","id":"dev","n":"2832","note":"row944"} +{"time":"945","id":"dev","n":"2835","note":"row945"} +{"time":"946","id":"dev","n":"2838","note":"row946"} +{"time":"947","id":"dev","n":"2841","note":"row947"} +{"time":"948","id":"dev","n":"2844","note":"row948"} +{"time":"949","id":"dev","n":"2847","note":"row949"} +{"time":"950","id":"dev","n":"2850","note":"row950"} +{"time":"951","id":"dev","n":"2853","note":"row951"} +{"time":"952","id":"dev","n":"2856","note":"row952"} +{"time":"953","id":"dev","n":"2859","note":"row953"} +{"time":"954","id":"dev","n":"2862","note":"row954"} +{"time":"955","id":"dev","n":"2865","note":"row955"} +{"time":"956","id":"dev","n":"2868","note":"row956"} +{"time":"957","id":"dev","n":"2871","note":"row957"} +{"time":"958","id":"dev","n":"2874","note":"row958"} +{"time":"959","id":"dev","n":"2877","note":"row959"} +{"time":"960","id":"dev","n":"2880","note":"row960"} +{"time":"961","id":"dev","n":"2883","note":"row961"} +{"time":"962","id":"dev","n":"2886","note":"row962"} +{"time":"963","id":"dev","n":"2889","note":"row963"} +{"time":"964","id":"dev","n":"2892","note":"row964"} +{"time":"965","id":"dev","n":"2895","note":"row965"} +{"time":"966","id":"dev","n":"2898","note":"row966"} +{"time":"967","id":"dev","n":"2901","note":"row967"} +{"time":"968","id":"dev","n":"2904","note":"row968"} +{"time":"969","id":"dev","n":"2907","note":"row969"} +{"time":"970","id":"dev","n":"2910","note":"row970"} +{"time":"971","id":"dev","n":"2913","note":"row971"} +{"time":"972","id":"dev","n":"2916","note":"row972"} +{"time":"973","id":"dev","n":"2919","note":"row973"} +{"time":"974","id":"dev","n":"2922","note":"row974"} +{"time":"975","id":"dev","n":"2925","note":"row975"} +{"time":"976","id":"dev","n":"2928","note":"row976"} +{"time":"977","id":"dev","n":"2931","note":"row977"} +{"time":"978","id":"dev","n":"2934","note":"row978"} +{"time":"979","id":"dev","n":"2937","note":"row979"} +{"time":"980","id":"dev","n":"2940","note":"row980"} +{"time":"981","id":"dev","n":"2943","note":"row981"} +{"time":"982","id":"dev","n":"2946","note":"row982"} +{"time":"983","id":"dev","n":"2949","note":"row983"} +{"time":"984","id":"dev","n":"2952","note":"row984"} +{"time":"985","id":"dev","n":"2955","note":"row985"} +{"time":"986","id":"dev","n":"2958","note":"row986"} +{"time":"987","id":"dev","n":"2961","note":"row987"} +{"time":"988","id":"dev","n":"2964","note":"row988"} +{"time":"989","id":"dev","n":"2967","note":"row989"} +{"time":"990","id":"dev","n":"2970","note":"row990"} +{"time":"991","id":"dev","n":"2973","note":"row991"} +{"time":"992","id":"dev","n":"2976","note":"row992"} +{"time":"993","id":"dev","n":"2979","note":"row993"} +{"time":"994","id":"dev","n":"2982","note":"row994"} +{"time":"995","id":"dev","n":"2985","note":"row995"} +{"time":"996","id":"dev","n":"2988","note":"row996"} +{"time":"997","id":"dev","n":"2991","note":"row997"} +{"time":"998","id":"dev","n":"2994","note":"row998"} +{"time":"999","id":"dev","n":"2997","note":"row999"} +{"time":"1000","id":"dev","n":"3000","note":"row1000"} +{"time":"1001","id":"dev","n":"3003","note":"row1001"} +{"time":"1002","id":"dev","n":"3006","note":"row1002"} +{"time":"1003","id":"dev","n":"3009","note":"row1003"} +{"time":"1004","id":"dev","n":"3012","note":"row1004"} +{"time":"1005","id":"dev","n":"3015","note":"row1005"} +{"time":"1006","id":"dev","n":"3018","note":"row1006"} +{"time":"1007","id":"dev","n":"3021","note":"row1007"} +{"time":"1008","id":"dev","n":"3024","note":"row1008"} +{"time":"1009","id":"dev","n":"3027","note":"row1009"} +{"time":"1010","id":"dev","n":"3030","note":"row1010"} +{"time":"1011","id":"dev","n":"3033","note":"row1011"} +{"time":"1012","id":"dev","n":"3036","note":"row1012"} +{"time":"1013","id":"dev","n":"3039","note":"row1013"} +{"time":"1014","id":"dev","n":"3042","note":"row1014"} +{"time":"1015","id":"dev","n":"3045","note":"row1015"} +{"time":"1016","id":"dev","n":"3048","note":"row1016"} +{"time":"1017","id":"dev","n":"3051","note":"row1017"} +{"time":"1018","id":"dev","n":"3054","note":"row1018"} +{"time":"1019","id":"dev","n":"3057","note":"row1019"} +{"time":"1020","id":"dev","n":"3060","note":"row1020"} +{"time":"1021","id":"dev","n":"3063","note":"row1021"} +{"time":"1022","id":"dev","n":"3066","note":"row1022"} +{"time":"1023","id":"dev","n":"3069","note":"row1023"} +{"time":"1024","id":"dev","n":"3072","note":"row1024"} +{"time":"1025","id":"dev","n":"3075","note":"row1025"} +{"time":"1026","id":"dev","n":"3078","note":"row1026"} +{"time":"1027","id":"dev","n":"3081","note":"row1027"} +{"time":"1028","id":"dev","n":"3084","note":"row1028"} +{"time":"1029","id":"dev","n":"3087","note":"row1029"} +{"time":"1030","id":"dev","n":"3090","note":"row1030"} +{"time":"1031","id":"dev","n":"3093","note":"row1031"} +{"time":"1032","id":"dev","n":"3096","note":"row1032"} +{"time":"1033","id":"dev","n":"3099","note":"row1033"} +{"time":"1034","id":"dev","n":"3102","note":"row1034"} +{"time":"1035","id":"dev","n":"3105","note":"row1035"} +{"time":"1036","id":"dev","n":"3108","note":"row1036"} +{"time":"1037","id":"dev","n":"3111","note":"row1037"} +{"time":"1038","id":"dev","n":"3114","note":"row1038"} +{"time":"1039","id":"dev","n":"3117","note":"row1039"} +{"time":"1040","id":"dev","n":"3120","note":"row1040"} +{"time":"1041","id":"dev","n":"3123","note":"row1041"} +{"time":"1042","id":"dev","n":"3126","note":"row1042"} +{"time":"1043","id":"dev","n":"3129","note":"row1043"} +{"time":"1044","id":"dev","n":"3132","note":"row1044"} +{"time":"1045","id":"dev","n":"3135","note":"row1045"} +{"time":"1046","id":"dev","n":"3138","note":"row1046"} +{"time":"1047","id":"dev","n":"3141","note":"row1047"} +{"time":"1048","id":"dev","n":"3144","note":"row1048"} +{"time":"1049","id":"dev","n":"3147","note":"row1049"} +{"time":"1050","id":"dev","n":"3150","note":"row1050"} +{"time":"1051","id":"dev","n":"3153","note":"row1051"} +{"time":"1052","id":"dev","n":"3156","note":"row1052"} +{"time":"1053","id":"dev","n":"3159","note":"row1053"} +{"time":"1054","id":"dev","n":"3162","note":"row1054"} +{"time":"1055","id":"dev","n":"3165","note":"row1055"} +{"time":"1056","id":"dev","n":"3168","note":"row1056"} +{"time":"1057","id":"dev","n":"3171","note":"row1057"} +{"time":"1058","id":"dev","n":"3174","note":"row1058"} +{"time":"1059","id":"dev","n":"3177","note":"row1059"} +{"time":"1060","id":"dev","n":"3180","note":"row1060"} +{"time":"1061","id":"dev","n":"3183","note":"row1061"} +{"time":"1062","id":"dev","n":"3186","note":"row1062"} +{"time":"1063","id":"dev","n":"3189","note":"row1063"} +{"time":"1064","id":"dev","n":"3192","note":"row1064"} +{"time":"1065","id":"dev","n":"3195","note":"row1065"} +{"time":"1066","id":"dev","n":"3198","note":"row1066"} +{"time":"1067","id":"dev","n":"3201","note":"row1067"} +{"time":"1068","id":"dev","n":"3204","note":"row1068"} +{"time":"1069","id":"dev","n":"3207","note":"row1069"} +{"time":"1070","id":"dev","n":"3210","note":"row1070"} +{"time":"1071","id":"dev","n":"3213","note":"row1071"} +{"time":"1072","id":"dev","n":"3216","note":"row1072"} +{"time":"1073","id":"dev","n":"3219","note":"row1073"} +{"time":"1074","id":"dev","n":"3222","note":"row1074"} +{"time":"1075","id":"dev","n":"3225","note":"row1075"} +{"time":"1076","id":"dev","n":"3228","note":"row1076"} +{"time":"1077","id":"dev","n":"3231","note":"row1077"} +{"time":"1078","id":"dev","n":"3234","note":"row1078"} +{"time":"1079","id":"dev","n":"3237","note":"row1079"} +{"time":"1080","id":"dev","n":"3240","note":"row1080"} +{"time":"1081","id":"dev","n":"3243","note":"row1081"} +{"time":"1082","id":"dev","n":"3246","note":"row1082"} +{"time":"1083","id":"dev","n":"3249","note":"row1083"} +{"time":"1084","id":"dev","n":"3252","note":"row1084"} +{"time":"1085","id":"dev","n":"3255","note":"row1085"} +{"time":"1086","id":"dev","n":"3258","note":"row1086"} +{"time":"1087","id":"dev","n":"3261","note":"row1087"} +{"time":"1088","id":"dev","n":"3264","note":"row1088"} +{"time":"1089","id":"dev","n":"3267","note":"row1089"} +{"time":"1090","id":"dev","n":"3270","note":"row1090"} +{"time":"1091","id":"dev","n":"3273","note":"row1091"} +{"time":"1092","id":"dev","n":"3276","note":"row1092"} +{"time":"1093","id":"dev","n":"3279","note":"row1093"} +{"time":"1094","id":"dev","n":"3282","note":"row1094"} +{"time":"1095","id":"dev","n":"3285","note":"row1095"} +{"time":"1096","id":"dev","n":"3288","note":"row1096"} +{"time":"1097","id":"dev","n":"3291","note":"row1097"} +{"time":"1098","id":"dev","n":"3294","note":"row1098"} +{"time":"1099","id":"dev","n":"3297","note":"row1099"} +{"time":"1100","id":"dev","n":"3300","note":"row1100"} +{"time":"1101","id":"dev","n":"3303","note":"row1101"} +{"time":"1102","id":"dev","n":"3306","note":"row1102"} +{"time":"1103","id":"dev","n":"3309","note":"row1103"} +{"time":"1104","id":"dev","n":"3312","note":"row1104"} +{"time":"1105","id":"dev","n":"3315","note":"row1105"} +{"time":"1106","id":"dev","n":"3318","note":"row1106"} +{"time":"1107","id":"dev","n":"3321","note":"row1107"} +{"time":"1108","id":"dev","n":"3324","note":"row1108"} +{"time":"1109","id":"dev","n":"3327","note":"row1109"} +{"time":"1110","id":"dev","n":"3330","note":"row1110"} +{"time":"1111","id":"dev","n":"3333","note":"row1111"} +{"time":"1112","id":"dev","n":"3336","note":"row1112"} +{"time":"1113","id":"dev","n":"3339","note":"row1113"} +{"time":"1114","id":"dev","n":"3342","note":"row1114"} +{"time":"1115","id":"dev","n":"3345","note":"row1115"} +{"time":"1116","id":"dev","n":"3348","note":"row1116"} +{"time":"1117","id":"dev","n":"3351","note":"row1117"} +{"time":"1118","id":"dev","n":"3354","note":"row1118"} +{"time":"1119","id":"dev","n":"3357","note":"row1119"} +{"time":"1120","id":"dev","n":"3360","note":"row1120"} +{"time":"1121","id":"dev","n":"3363","note":"row1121"} +{"time":"1122","id":"dev","n":"3366","note":"row1122"} +{"time":"1123","id":"dev","n":"3369","note":"row1123"} +{"time":"1124","id":"dev","n":"3372","note":"row1124"} +{"time":"1125","id":"dev","n":"3375","note":"row1125"} +{"time":"1126","id":"dev","n":"3378","note":"row1126"} +{"time":"1127","id":"dev","n":"3381","note":"row1127"} +{"time":"1128","id":"dev","n":"3384","note":"row1128"} +{"time":"1129","id":"dev","n":"3387","note":"row1129"} +{"time":"1130","id":"dev","n":"3390","note":"row1130"} +{"time":"1131","id":"dev","n":"3393","note":"row1131"} +{"time":"1132","id":"dev","n":"3396","note":"row1132"} +{"time":"1133","id":"dev","n":"3399","note":"row1133"} +{"time":"1134","id":"dev","n":"3402","note":"row1134"} +{"time":"1135","id":"dev","n":"3405","note":"row1135"} +{"time":"1136","id":"dev","n":"3408","note":"row1136"} +{"time":"1137","id":"dev","n":"3411","note":"row1137"} +{"time":"1138","id":"dev","n":"3414","note":"row1138"} +{"time":"1139","id":"dev","n":"3417","note":"row1139"} +{"time":"1140","id":"dev","n":"3420","note":"row1140"} +{"time":"1141","id":"dev","n":"3423","note":"row1141"} +{"time":"1142","id":"dev","n":"3426","note":"row1142"} +{"time":"1143","id":"dev","n":"3429","note":"row1143"} +{"time":"1144","id":"dev","n":"3432","note":"row1144"} +{"time":"1145","id":"dev","n":"3435","note":"row1145"} +{"time":"1146","id":"dev","n":"3438","note":"row1146"} +{"time":"1147","id":"dev","n":"3441","note":"row1147"} +{"time":"1148","id":"dev","n":"3444","note":"row1148"} +{"time":"1149","id":"dev","n":"3447","note":"row1149"} +{"time":"1150","id":"dev","n":"3450","note":"row1150"} +{"time":"1151","id":"dev","n":"3453","note":"row1151"} +{"time":"1152","id":"dev","n":"3456","note":"row1152"} +{"time":"1153","id":"dev","n":"3459","note":"row1153"} +{"time":"1154","id":"dev","n":"3462","note":"row1154"} +{"time":"1155","id":"dev","n":"3465","note":"row1155"} +{"time":"1156","id":"dev","n":"3468","note":"row1156"} +{"time":"1157","id":"dev","n":"3471","note":"row1157"} +{"time":"1158","id":"dev","n":"3474","note":"row1158"} +{"time":"1159","id":"dev","n":"3477","note":"row1159"} +{"time":"1160","id":"dev","n":"3480","note":"row1160"} +{"time":"1161","id":"dev","n":"3483","note":"row1161"} +{"time":"1162","id":"dev","n":"3486","note":"row1162"} +{"time":"1163","id":"dev","n":"3489","note":"row1163"} +{"time":"1164","id":"dev","n":"3492","note":"row1164"} +{"time":"1165","id":"dev","n":"3495","note":"row1165"} +{"time":"1166","id":"dev","n":"3498","note":"row1166"} +{"time":"1167","id":"dev","n":"3501","note":"row1167"} +{"time":"1168","id":"dev","n":"3504","note":"row1168"} +{"time":"1169","id":"dev","n":"3507","note":"row1169"} +{"time":"1170","id":"dev","n":"3510","note":"row1170"} +{"time":"1171","id":"dev","n":"3513","note":"row1171"} +{"time":"1172","id":"dev","n":"3516","note":"row1172"} +{"time":"1173","id":"dev","n":"3519","note":"row1173"} +{"time":"1174","id":"dev","n":"3522","note":"row1174"} +{"time":"1175","id":"dev","n":"3525","note":"row1175"} +{"time":"1176","id":"dev","n":"3528","note":"row1176"} +{"time":"1177","id":"dev","n":"3531","note":"row1177"} +{"time":"1178","id":"dev","n":"3534","note":"row1178"} +{"time":"1179","id":"dev","n":"3537","note":"row1179"} +{"time":"1180","id":"dev","n":"3540","note":"row1180"} +{"time":"1181","id":"dev","n":"3543","note":"row1181"} +{"time":"1182","id":"dev","n":"3546","note":"row1182"} +{"time":"1183","id":"dev","n":"3549","note":"row1183"} +{"time":"1184","id":"dev","n":"3552","note":"row1184"} +{"time":"1185","id":"dev","n":"3555","note":"row1185"} +{"time":"1186","id":"dev","n":"3558","note":"row1186"} +{"time":"1187","id":"dev","n":"3561","note":"row1187"} +{"time":"1188","id":"dev","n":"3564","note":"row1188"} +{"time":"1189","id":"dev","n":"3567","note":"row1189"} +{"time":"1190","id":"dev","n":"3570","note":"row1190"} +{"time":"1191","id":"dev","n":"3573","note":"row1191"} +{"time":"1192","id":"dev","n":"3576","note":"row1192"} +{"time":"1193","id":"dev","n":"3579","note":"row1193"} +{"time":"1194","id":"dev","n":"3582","note":"row1194"} +{"time":"1195","id":"dev","n":"3585","note":"row1195"} +{"time":"1196","id":"dev","n":"3588","note":"row1196"} +{"time":"1197","id":"dev","n":"3591","note":"row1197"} +{"time":"1198","id":"dev","n":"3594","note":"row1198"} +{"time":"1199","id":"dev","n":"3597","note":"row1199"} +{"time":"1200","id":"dev","n":"3600","note":"row1200"} +{"time":"1201","id":"dev","n":"3603","note":"row1201"} +{"time":"1202","id":"dev","n":"3606","note":"row1202"} +{"time":"1203","id":"dev","n":"3609","note":"row1203"} +{"time":"1204","id":"dev","n":"3612","note":"row1204"} +{"time":"1205","id":"dev","n":"3615","note":"row1205"} +{"time":"1206","id":"dev","n":"3618","note":"row1206"} +{"time":"1207","id":"dev","n":"3621","note":"row1207"} +{"time":"1208","id":"dev","n":"3624","note":"row1208"} +{"time":"1209","id":"dev","n":"3627","note":"row1209"} +{"time":"1210","id":"dev","n":"3630","note":"row1210"} +{"time":"1211","id":"dev","n":"3633","note":"row1211"} +{"time":"1212","id":"dev","n":"3636","note":"row1212"} +{"time":"1213","id":"dev","n":"3639","note":"row1213"} +{"time":"1214","id":"dev","n":"3642","note":"row1214"} +{"time":"1215","id":"dev","n":"3645","note":"row1215"} +{"time":"1216","id":"dev","n":"3648","note":"row1216"} +{"time":"1217","id":"dev","n":"3651","note":"row1217"} +{"time":"1218","id":"dev","n":"3654","note":"row1218"} +{"time":"1219","id":"dev","n":"3657","note":"row1219"} +{"time":"1220","id":"dev","n":"3660","note":"row1220"} +{"time":"1221","id":"dev","n":"3663","note":"row1221"} +{"time":"1222","id":"dev","n":"3666","note":"row1222"} +{"time":"1223","id":"dev","n":"3669","note":"row1223"} +{"time":"1224","id":"dev","n":"3672","note":"row1224"} +{"time":"1225","id":"dev","n":"3675","note":"row1225"} +{"time":"1226","id":"dev","n":"3678","note":"row1226"} +{"time":"1227","id":"dev","n":"3681","note":"row1227"} +{"time":"1228","id":"dev","n":"3684","note":"row1228"} +{"time":"1229","id":"dev","n":"3687","note":"row1229"} +{"time":"1230","id":"dev","n":"3690","note":"row1230"} +{"time":"1231","id":"dev","n":"3693","note":"row1231"} +{"time":"1232","id":"dev","n":"3696","note":"row1232"} +{"time":"1233","id":"dev","n":"3699","note":"row1233"} +{"time":"1234","id":"dev","n":"3702","note":"row1234"} +{"time":"1235","id":"dev","n":"3705","note":"row1235"} +{"time":"1236","id":"dev","n":"3708","note":"row1236"} +{"time":"1237","id":"dev","n":"3711","note":"row1237"} +{"time":"1238","id":"dev","n":"3714","note":"row1238"} +{"time":"1239","id":"dev","n":"3717","note":"row1239"} +{"time":"1240","id":"dev","n":"3720","note":"row1240"} +{"time":"1241","id":"dev","n":"3723","note":"row1241"} +{"time":"1242","id":"dev","n":"3726","note":"row1242"} +{"time":"1243","id":"dev","n":"3729","note":"row1243"} +{"time":"1244","id":"dev","n":"3732","note":"row1244"} +{"time":"1245","id":"dev","n":"3735","note":"row1245"} +{"time":"1246","id":"dev","n":"3738","note":"row1246"} +{"time":"1247","id":"dev","n":"3741","note":"row1247"} +{"time":"1248","id":"dev","n":"3744","note":"row1248"} +{"time":"1249","id":"dev","n":"3747","note":"row1249"} +{"time":"1250","id":"dev","n":"3750","note":"row1250"} +{"time":"1251","id":"dev","n":"3753","note":"row1251"} +{"time":"1252","id":"dev","n":"3756","note":"row1252"} +{"time":"1253","id":"dev","n":"3759","note":"row1253"} +{"time":"1254","id":"dev","n":"3762","note":"row1254"} +{"time":"1255","id":"dev","n":"3765","note":"row1255"} +{"time":"1256","id":"dev","n":"3768","note":"row1256"} +{"time":"1257","id":"dev","n":"3771","note":"row1257"} +{"time":"1258","id":"dev","n":"3774","note":"row1258"} +{"time":"1259","id":"dev","n":"3777","note":"row1259"} +{"time":"1260","id":"dev","n":"3780","note":"row1260"} +{"time":"1261","id":"dev","n":"3783","note":"row1261"} +{"time":"1262","id":"dev","n":"3786","note":"row1262"} +{"time":"1263","id":"dev","n":"3789","note":"row1263"} +{"time":"1264","id":"dev","n":"3792","note":"row1264"} +{"time":"1265","id":"dev","n":"3795","note":"row1265"} +{"time":"1266","id":"dev","n":"3798","note":"row1266"} +{"time":"1267","id":"dev","n":"3801","note":"row1267"} +{"time":"1268","id":"dev","n":"3804","note":"row1268"} +{"time":"1269","id":"dev","n":"3807","note":"row1269"} +{"time":"1270","id":"dev","n":"3810","note":"row1270"} +{"time":"1271","id":"dev","n":"3813","note":"row1271"} +{"time":"1272","id":"dev","n":"3816","note":"row1272"} +{"time":"1273","id":"dev","n":"3819","note":"row1273"} +{"time":"1274","id":"dev","n":"3822","note":"row1274"} +{"time":"1275","id":"dev","n":"3825","note":"row1275"} +{"time":"1276","id":"dev","n":"3828","note":"row1276"} +{"time":"1277","id":"dev","n":"3831","note":"row1277"} +{"time":"1278","id":"dev","n":"3834","note":"row1278"} +{"time":"1279","id":"dev","n":"3837","note":"row1279"} +{"time":"1280","id":"dev","n":"3840","note":"row1280"} +{"time":"1281","id":"dev","n":"3843","note":"row1281"} +{"time":"1282","id":"dev","n":"3846","note":"row1282"} +{"time":"1283","id":"dev","n":"3849","note":"row1283"} +{"time":"1284","id":"dev","n":"3852","note":"row1284"} +{"time":"1285","id":"dev","n":"3855","note":"row1285"} +{"time":"1286","id":"dev","n":"3858","note":"row1286"} +{"time":"1287","id":"dev","n":"3861","note":"row1287"} +{"time":"1288","id":"dev","n":"3864","note":"row1288"} +{"time":"1289","id":"dev","n":"3867","note":"row1289"} +{"time":"1290","id":"dev","n":"3870","note":"row1290"} +{"time":"1291","id":"dev","n":"3873","note":"row1291"} +{"time":"1292","id":"dev","n":"3876","note":"row1292"} +{"time":"1293","id":"dev","n":"3879","note":"row1293"} +{"time":"1294","id":"dev","n":"3882","note":"row1294"} +{"time":"1295","id":"dev","n":"3885","note":"row1295"} +{"time":"1296","id":"dev","n":"3888","note":"row1296"} +{"time":"1297","id":"dev","n":"3891","note":"row1297"} +{"time":"1298","id":"dev","n":"3894","note":"row1298"} +{"time":"1299","id":"dev","n":"3897","note":"row1299"} +{"time":"1300","id":"dev","n":"3900","note":"row1300"} +{"time":"1301","id":"dev","n":"3903","note":"row1301"} +{"time":"1302","id":"dev","n":"3906","note":"row1302"} +{"time":"1303","id":"dev","n":"3909","note":"row1303"} +{"time":"1304","id":"dev","n":"3912","note":"row1304"} +{"time":"1305","id":"dev","n":"3915","note":"row1305"} +{"time":"1306","id":"dev","n":"3918","note":"row1306"} +{"time":"1307","id":"dev","n":"3921","note":"row1307"} +{"time":"1308","id":"dev","n":"3924","note":"row1308"} +{"time":"1309","id":"dev","n":"3927","note":"row1309"} +{"time":"1310","id":"dev","n":"3930","note":"row1310"} +{"time":"1311","id":"dev","n":"3933","note":"row1311"} +{"time":"1312","id":"dev","n":"3936","note":"row1312"} +{"time":"1313","id":"dev","n":"3939","note":"row1313"} +{"time":"1314","id":"dev","n":"3942","note":"row1314"} +{"time":"1315","id":"dev","n":"3945","note":"row1315"} +{"time":"1316","id":"dev","n":"3948","note":"row1316"} +{"time":"1317","id":"dev","n":"3951","note":"row1317"} +{"time":"1318","id":"dev","n":"3954","note":"row1318"} +{"time":"1319","id":"dev","n":"3957","note":"row1319"} +{"time":"1320","id":"dev","n":"3960","note":"row1320"} +{"time":"1321","id":"dev","n":"3963","note":"row1321"} +{"time":"1322","id":"dev","n":"3966","note":"row1322"} +{"time":"1323","id":"dev","n":"3969","note":"row1323"} +{"time":"1324","id":"dev","n":"3972","note":"row1324"} +{"time":"1325","id":"dev","n":"3975","note":"row1325"} +{"time":"1326","id":"dev","n":"3978","note":"row1326"} +{"time":"1327","id":"dev","n":"3981","note":"row1327"} +{"time":"1328","id":"dev","n":"3984","note":"row1328"} +{"time":"1329","id":"dev","n":"3987","note":"row1329"} +{"time":"1330","id":"dev","n":"3990","note":"row1330"} +{"time":"1331","id":"dev","n":"3993","note":"row1331"} +{"time":"1332","id":"dev","n":"3996","note":"row1332"} +{"time":"1333","id":"dev","n":"3999","note":"row1333"} +{"time":"1334","id":"dev","n":"4002","note":"row1334"} +{"time":"1335","id":"dev","n":"4005","note":"row1335"} +{"time":"1336","id":"dev","n":"4008","note":"row1336"} +{"time":"1337","id":"dev","n":"4011","note":"row1337"} +{"time":"1338","id":"dev","n":"4014","note":"row1338"} +{"time":"1339","id":"dev","n":"4017","note":"row1339"} +{"time":"1340","id":"dev","n":"4020","note":"row1340"} +{"time":"1341","id":"dev","n":"4023","note":"row1341"} +{"time":"1342","id":"dev","n":"4026","note":"row1342"} +{"time":"1343","id":"dev","n":"4029","note":"row1343"} +{"time":"1344","id":"dev","n":"4032","note":"row1344"} +{"time":"1345","id":"dev","n":"4035","note":"row1345"} +{"time":"1346","id":"dev","n":"4038","note":"row1346"} +{"time":"1347","id":"dev","n":"4041","note":"row1347"} +{"time":"1348","id":"dev","n":"4044","note":"row1348"} +{"time":"1349","id":"dev","n":"4047","note":"row1349"} +{"time":"1350","id":"dev","n":"4050","note":"row1350"} +{"time":"1351","id":"dev","n":"4053","note":"row1351"} +{"time":"1352","id":"dev","n":"4056","note":"row1352"} +{"time":"1353","id":"dev","n":"4059","note":"row1353"} +{"time":"1354","id":"dev","n":"4062","note":"row1354"} +{"time":"1355","id":"dev","n":"4065","note":"row1355"} +{"time":"1356","id":"dev","n":"4068","note":"row1356"} +{"time":"1357","id":"dev","n":"4071","note":"row1357"} +{"time":"1358","id":"dev","n":"4074","note":"row1358"} +{"time":"1359","id":"dev","n":"4077","note":"row1359"} +{"time":"1360","id":"dev","n":"4080","note":"row1360"} +{"time":"1361","id":"dev","n":"4083","note":"row1361"} +{"time":"1362","id":"dev","n":"4086","note":"row1362"} +{"time":"1363","id":"dev","n":"4089","note":"row1363"} +{"time":"1364","id":"dev","n":"4092","note":"row1364"} +{"time":"1365","id":"dev","n":"4095","note":"row1365"} +{"time":"1366","id":"dev","n":"4098","note":"row1366"} +{"time":"1367","id":"dev","n":"4101","note":"row1367"} +{"time":"1368","id":"dev","n":"4104","note":"row1368"} +{"time":"1369","id":"dev","n":"4107","note":"row1369"} +{"time":"1370","id":"dev","n":"4110","note":"row1370"} +{"time":"1371","id":"dev","n":"4113","note":"row1371"} +{"time":"1372","id":"dev","n":"4116","note":"row1372"} +{"time":"1373","id":"dev","n":"4119","note":"row1373"} +{"time":"1374","id":"dev","n":"4122","note":"row1374"} +{"time":"1375","id":"dev","n":"4125","note":"row1375"} +{"time":"1376","id":"dev","n":"4128","note":"row1376"} +{"time":"1377","id":"dev","n":"4131","note":"row1377"} +{"time":"1378","id":"dev","n":"4134","note":"row1378"} +{"time":"1379","id":"dev","n":"4137","note":"row1379"} +{"time":"1380","id":"dev","n":"4140","note":"row1380"} +{"time":"1381","id":"dev","n":"4143","note":"row1381"} +{"time":"1382","id":"dev","n":"4146","note":"row1382"} +{"time":"1383","id":"dev","n":"4149","note":"row1383"} +{"time":"1384","id":"dev","n":"4152","note":"row1384"} +{"time":"1385","id":"dev","n":"4155","note":"row1385"} +{"time":"1386","id":"dev","n":"4158","note":"row1386"} +{"time":"1387","id":"dev","n":"4161","note":"row1387"} +{"time":"1388","id":"dev","n":"4164","note":"row1388"} +{"time":"1389","id":"dev","n":"4167","note":"row1389"} +{"time":"1390","id":"dev","n":"4170","note":"row1390"} +{"time":"1391","id":"dev","n":"4173","note":"row1391"} +{"time":"1392","id":"dev","n":"4176","note":"row1392"} +{"time":"1393","id":"dev","n":"4179","note":"row1393"} +{"time":"1394","id":"dev","n":"4182","note":"row1394"} +{"time":"1395","id":"dev","n":"4185","note":"row1395"} +{"time":"1396","id":"dev","n":"4188","note":"row1396"} +{"time":"1397","id":"dev","n":"4191","note":"row1397"} +{"time":"1398","id":"dev","n":"4194","note":"row1398"} +{"time":"1399","id":"dev","n":"4197","note":"row1399"} +{"time":"1400","id":"dev","n":"4200","note":"row1400"} +{"time":"1401","id":"dev","n":"4203","note":"row1401"} +{"time":"1402","id":"dev","n":"4206","note":"row1402"} +{"time":"1403","id":"dev","n":"4209","note":"row1403"} +{"time":"1404","id":"dev","n":"4212","note":"row1404"} +{"time":"1405","id":"dev","n":"4215","note":"row1405"} +{"time":"1406","id":"dev","n":"4218","note":"row1406"} +{"time":"1407","id":"dev","n":"4221","note":"row1407"} +{"time":"1408","id":"dev","n":"4224","note":"row1408"} +{"time":"1409","id":"dev","n":"4227","note":"row1409"} +{"time":"1410","id":"dev","n":"4230","note":"row1410"} +{"time":"1411","id":"dev","n":"4233","note":"row1411"} +{"time":"1412","id":"dev","n":"4236","note":"row1412"} +{"time":"1413","id":"dev","n":"4239","note":"row1413"} +{"time":"1414","id":"dev","n":"4242","note":"row1414"} +{"time":"1415","id":"dev","n":"4245","note":"row1415"} +{"time":"1416","id":"dev","n":"4248","note":"row1416"} +{"time":"1417","id":"dev","n":"4251","note":"row1417"} +{"time":"1418","id":"dev","n":"4254","note":"row1418"} +{"time":"1419","id":"dev","n":"4257","note":"row1419"} +{"time":"1420","id":"dev","n":"4260","note":"row1420"} +{"time":"1421","id":"dev","n":"4263","note":"row1421"} +{"time":"1422","id":"dev","n":"4266","note":"row1422"} +{"time":"1423","id":"dev","n":"4269","note":"row1423"} +{"time":"1424","id":"dev","n":"4272","note":"row1424"} +{"time":"1425","id":"dev","n":"4275","note":"row1425"} +{"time":"1426","id":"dev","n":"4278","note":"row1426"} +{"time":"1427","id":"dev","n":"4281","note":"row1427"} +{"time":"1428","id":"dev","n":"4284","note":"row1428"} +{"time":"1429","id":"dev","n":"4287","note":"row1429"} +{"time":"1430","id":"dev","n":"4290","note":"row1430"} +{"time":"1431","id":"dev","n":"4293","note":"row1431"} +{"time":"1432","id":"dev","n":"4296","note":"row1432"} +{"time":"1433","id":"dev","n":"4299","note":"row1433"} +{"time":"1434","id":"dev","n":"4302","note":"row1434"} +{"time":"1435","id":"dev","n":"4305","note":"row1435"} +{"time":"1436","id":"dev","n":"4308","note":"row1436"} +{"time":"1437","id":"dev","n":"4311","note":"row1437"} +{"time":"1438","id":"dev","n":"4314","note":"row1438"} +{"time":"1439","id":"dev","n":"4317","note":"row1439"} +{"time":"1440","id":"dev","n":"4320","note":"row1440"} +{"time":"1441","id":"dev","n":"4323","note":"row1441"} +{"time":"1442","id":"dev","n":"4326","note":"row1442"} +{"time":"1443","id":"dev","n":"4329","note":"row1443"} +{"time":"1444","id":"dev","n":"4332","note":"row1444"} +{"time":"1445","id":"dev","n":"4335","note":"row1445"} +{"time":"1446","id":"dev","n":"4338","note":"row1446"} +{"time":"1447","id":"dev","n":"4341","note":"row1447"} +{"time":"1448","id":"dev","n":"4344","note":"row1448"} +{"time":"1449","id":"dev","n":"4347","note":"row1449"} +{"time":"1450","id":"dev","n":"4350","note":"row1450"} +{"time":"1451","id":"dev","n":"4353","note":"row1451"} +{"time":"1452","id":"dev","n":"4356","note":"row1452"} +{"time":"1453","id":"dev","n":"4359","note":"row1453"} +{"time":"1454","id":"dev","n":"4362","note":"row1454"} +{"time":"1455","id":"dev","n":"4365","note":"row1455"} +{"time":"1456","id":"dev","n":"4368","note":"row1456"} +{"time":"1457","id":"dev","n":"4371","note":"row1457"} +{"time":"1458","id":"dev","n":"4374","note":"row1458"} +{"time":"1459","id":"dev","n":"4377","note":"row1459"} +{"time":"1460","id":"dev","n":"4380","note":"row1460"} +{"time":"1461","id":"dev","n":"4383","note":"row1461"} +{"time":"1462","id":"dev","n":"4386","note":"row1462"} +{"time":"1463","id":"dev","n":"4389","note":"row1463"} +{"time":"1464","id":"dev","n":"4392","note":"row1464"} +{"time":"1465","id":"dev","n":"4395","note":"row1465"} +{"time":"1466","id":"dev","n":"4398","note":"row1466"} +{"time":"1467","id":"dev","n":"4401","note":"row1467"} +{"time":"1468","id":"dev","n":"4404","note":"row1468"} +{"time":"1469","id":"dev","n":"4407","note":"row1469"} +{"time":"1470","id":"dev","n":"4410","note":"row1470"} +{"time":"1471","id":"dev","n":"4413","note":"row1471"} +{"time":"1472","id":"dev","n":"4416","note":"row1472"} +{"time":"1473","id":"dev","n":"4419","note":"row1473"} +{"time":"1474","id":"dev","n":"4422","note":"row1474"} +{"time":"1475","id":"dev","n":"4425","note":"row1475"} +{"time":"1476","id":"dev","n":"4428","note":"row1476"} +{"time":"1477","id":"dev","n":"4431","note":"row1477"} +{"time":"1478","id":"dev","n":"4434","note":"row1478"} +{"time":"1479","id":"dev","n":"4437","note":"row1479"} +{"time":"1480","id":"dev","n":"4440","note":"row1480"} +{"time":"1481","id":"dev","n":"4443","note":"row1481"} +{"time":"1482","id":"dev","n":"4446","note":"row1482"} +{"time":"1483","id":"dev","n":"4449","note":"row1483"} +{"time":"1484","id":"dev","n":"4452","note":"row1484"} +{"time":"1485","id":"dev","n":"4455","note":"row1485"} +{"time":"1486","id":"dev","n":"4458","note":"row1486"} +{"time":"1487","id":"dev","n":"4461","note":"row1487"} +{"time":"1488","id":"dev","n":"4464","note":"row1488"} +{"time":"1489","id":"dev","n":"4467","note":"row1489"} +{"time":"1490","id":"dev","n":"4470","note":"row1490"} +{"time":"1491","id":"dev","n":"4473","note":"row1491"} +{"time":"1492","id":"dev","n":"4476","note":"row1492"} +{"time":"1493","id":"dev","n":"4479","note":"row1493"} +{"time":"1494","id":"dev","n":"4482","note":"row1494"} +{"time":"1495","id":"dev","n":"4485","note":"row1495"} +{"time":"1496","id":"dev","n":"4488","note":"row1496"} +{"time":"1497","id":"dev","n":"4491","note":"row1497"} +{"time":"1498","id":"dev","n":"4494","note":"row1498"} +{"time":"1499","id":"dev","n":"4497","note":"row1499"} +{"time":"1500","id":"dev","n":"4500","note":"row1500"} +{"time":"1501","id":"dev","n":"4503","note":"row1501"} +{"time":"1502","id":"dev","n":"4506","note":"row1502"} +{"time":"1503","id":"dev","n":"4509","note":"row1503"} +{"time":"1504","id":"dev","n":"4512","note":"row1504"} +{"time":"1505","id":"dev","n":"4515","note":"row1505"} +{"time":"1506","id":"dev","n":"4518","note":"row1506"} +{"time":"1507","id":"dev","n":"4521","note":"row1507"} +{"time":"1508","id":"dev","n":"4524","note":"row1508"} +{"time":"1509","id":"dev","n":"4527","note":"row1509"} +{"time":"1510","id":"dev","n":"4530","note":"row1510"} +{"time":"1511","id":"dev","n":"4533","note":"row1511"} +{"time":"1512","id":"dev","n":"4536","note":"row1512"} +{"time":"1513","id":"dev","n":"4539","note":"row1513"} +{"time":"1514","id":"dev","n":"4542","note":"row1514"} +{"time":"1515","id":"dev","n":"4545","note":"row1515"} +{"time":"1516","id":"dev","n":"4548","note":"row1516"} +{"time":"1517","id":"dev","n":"4551","note":"row1517"} +{"time":"1518","id":"dev","n":"4554","note":"row1518"} +{"time":"1519","id":"dev","n":"4557","note":"row1519"} +{"time":"1520","id":"dev","n":"4560","note":"row1520"} +{"time":"1521","id":"dev","n":"4563","note":"row1521"} +{"time":"1522","id":"dev","n":"4566","note":"row1522"} +{"time":"1523","id":"dev","n":"4569","note":"row1523"} +{"time":"1524","id":"dev","n":"4572","note":"row1524"} +{"time":"1525","id":"dev","n":"4575","note":"row1525"} +{"time":"1526","id":"dev","n":"4578","note":"row1526"} +{"time":"1527","id":"dev","n":"4581","note":"row1527"} +{"time":"1528","id":"dev","n":"4584","note":"row1528"} +{"time":"1529","id":"dev","n":"4587","note":"row1529"} +{"time":"1530","id":"dev","n":"4590","note":"row1530"} +{"time":"1531","id":"dev","n":"4593","note":"row1531"} +{"time":"1532","id":"dev","n":"4596","note":"row1532"} +{"time":"1533","id":"dev","n":"4599","note":"row1533"} +{"time":"1534","id":"dev","n":"4602","note":"row1534"} +{"time":"1535","id":"dev","n":"4605","note":"row1535"} +{"time":"1536","id":"dev","n":"4608","note":"row1536"} +{"time":"1537","id":"dev","n":"4611","note":"row1537"} +{"time":"1538","id":"dev","n":"4614","note":"row1538"} +{"time":"1539","id":"dev","n":"4617","note":"row1539"} +{"time":"1540","id":"dev","n":"4620","note":"row1540"} +{"time":"1541","id":"dev","n":"4623","note":"row1541"} +{"time":"1542","id":"dev","n":"4626","note":"row1542"} +{"time":"1543","id":"dev","n":"4629","note":"row1543"} +{"time":"1544","id":"dev","n":"4632","note":"row1544"} +{"time":"1545","id":"dev","n":"4635","note":"row1545"} +{"time":"1546","id":"dev","n":"4638","note":"row1546"} +{"time":"1547","id":"dev","n":"4641","note":"row1547"} +{"time":"1548","id":"dev","n":"4644","note":"row1548"} +{"time":"1549","id":"dev","n":"4647","note":"row1549"} +{"time":"1550","id":"dev","n":"4650","note":"row1550"} +{"time":"1551","id":"dev","n":"4653","note":"row1551"} +{"time":"1552","id":"dev","n":"4656","note":"row1552"} +{"time":"1553","id":"dev","n":"4659","note":"row1553"} +{"time":"1554","id":"dev","n":"4662","note":"row1554"} +{"time":"1555","id":"dev","n":"4665","note":"row1555"} +{"time":"1556","id":"dev","n":"4668","note":"row1556"} +{"time":"1557","id":"dev","n":"4671","note":"row1557"} +{"time":"1558","id":"dev","n":"4674","note":"row1558"} +{"time":"1559","id":"dev","n":"4677","note":"row1559"} +{"time":"1560","id":"dev","n":"4680","note":"row1560"} +{"time":"1561","id":"dev","n":"4683","note":"row1561"} +{"time":"1562","id":"dev","n":"4686","note":"row1562"} +{"time":"1563","id":"dev","n":"4689","note":"row1563"} +{"time":"1564","id":"dev","n":"4692","note":"row1564"} +{"time":"1565","id":"dev","n":"4695","note":"row1565"} +{"time":"1566","id":"dev","n":"4698","note":"row1566"} +{"time":"1567","id":"dev","n":"4701","note":"row1567"} +{"time":"1568","id":"dev","n":"4704","note":"row1568"} +{"time":"1569","id":"dev","n":"4707","note":"row1569"} +{"time":"1570","id":"dev","n":"4710","note":"row1570"} +{"time":"1571","id":"dev","n":"4713","note":"row1571"} +{"time":"1572","id":"dev","n":"4716","note":"row1572"} +{"time":"1573","id":"dev","n":"4719","note":"row1573"} +{"time":"1574","id":"dev","n":"4722","note":"row1574"} +{"time":"1575","id":"dev","n":"4725","note":"row1575"} +{"time":"1576","id":"dev","n":"4728","note":"row1576"} +{"time":"1577","id":"dev","n":"4731","note":"row1577"} +{"time":"1578","id":"dev","n":"4734","note":"row1578"} +{"time":"1579","id":"dev","n":"4737","note":"row1579"} +{"time":"1580","id":"dev","n":"4740","note":"row1580"} +{"time":"1581","id":"dev","n":"4743","note":"row1581"} +{"time":"1582","id":"dev","n":"4746","note":"row1582"} +{"time":"1583","id":"dev","n":"4749","note":"row1583"} +{"time":"1584","id":"dev","n":"4752","note":"row1584"} +{"time":"1585","id":"dev","n":"4755","note":"row1585"} +{"time":"1586","id":"dev","n":"4758","note":"row1586"} +{"time":"1587","id":"dev","n":"4761","note":"row1587"} +{"time":"1588","id":"dev","n":"4764","note":"row1588"} +{"time":"1589","id":"dev","n":"4767","note":"row1589"} +{"time":"1590","id":"dev","n":"4770","note":"row1590"} +{"time":"1591","id":"dev","n":"4773","note":"row1591"} +{"time":"1592","id":"dev","n":"4776","note":"row1592"} +{"time":"1593","id":"dev","n":"4779","note":"row1593"} +{"time":"1594","id":"dev","n":"4782","note":"row1594"} +{"time":"1595","id":"dev","n":"4785","note":"row1595"} +{"time":"1596","id":"dev","n":"4788","note":"row1596"} +{"time":"1597","id":"dev","n":"4791","note":"row1597"} +{"time":"1598","id":"dev","n":"4794","note":"row1598"} +{"time":"1599","id":"dev","n":"4797","note":"row1599"} +{"time":"1600","id":"dev","n":"4800","note":"row1600"} +{"time":"1601","id":"dev","n":"4803","note":"row1601"} +{"time":"1602","id":"dev","n":"4806","note":"row1602"} +{"time":"1603","id":"dev","n":"4809","note":"row1603"} +{"time":"1604","id":"dev","n":"4812","note":"row1604"} +{"time":"1605","id":"dev","n":"4815","note":"row1605"} +{"time":"1606","id":"dev","n":"4818","note":"row1606"} +{"time":"1607","id":"dev","n":"4821","note":"row1607"} +{"time":"1608","id":"dev","n":"4824","note":"row1608"} +{"time":"1609","id":"dev","n":"4827","note":"row1609"} +{"time":"1610","id":"dev","n":"4830","note":"row1610"} +{"time":"1611","id":"dev","n":"4833","note":"row1611"} +{"time":"1612","id":"dev","n":"4836","note":"row1612"} +{"time":"1613","id":"dev","n":"4839","note":"row1613"} +{"time":"1614","id":"dev","n":"4842","note":"row1614"} +{"time":"1615","id":"dev","n":"4845","note":"row1615"} +{"time":"1616","id":"dev","n":"4848","note":"row1616"} +{"time":"1617","id":"dev","n":"4851","note":"row1617"} +{"time":"1618","id":"dev","n":"4854","note":"row1618"} +{"time":"1619","id":"dev","n":"4857","note":"row1619"} +{"time":"1620","id":"dev","n":"4860","note":"row1620"} +{"time":"1621","id":"dev","n":"4863","note":"row1621"} +{"time":"1622","id":"dev","n":"4866","note":"row1622"} +{"time":"1623","id":"dev","n":"4869","note":"row1623"} +{"time":"1624","id":"dev","n":"4872","note":"row1624"} +{"time":"1625","id":"dev","n":"4875","note":"row1625"} +{"time":"1626","id":"dev","n":"4878","note":"row1626"} +{"time":"1627","id":"dev","n":"4881","note":"row1627"} +{"time":"1628","id":"dev","n":"4884","note":"row1628"} +{"time":"1629","id":"dev","n":"4887","note":"row1629"} +{"time":"1630","id":"dev","n":"4890","note":"row1630"} +{"time":"1631","id":"dev","n":"4893","note":"row1631"} +{"time":"1632","id":"dev","n":"4896","note":"row1632"} +{"time":"1633","id":"dev","n":"4899","note":"row1633"} +{"time":"1634","id":"dev","n":"4902","note":"row1634"} +{"time":"1635","id":"dev","n":"4905","note":"row1635"} +{"time":"1636","id":"dev","n":"4908","note":"row1636"} +{"time":"1637","id":"dev","n":"4911","note":"row1637"} +{"time":"1638","id":"dev","n":"4914","note":"row1638"} +{"time":"1639","id":"dev","n":"4917","note":"row1639"} +{"time":"1640","id":"dev","n":"4920","note":"row1640"} +{"time":"1641","id":"dev","n":"4923","note":"row1641"} +{"time":"1642","id":"dev","n":"4926","note":"row1642"} +{"time":"1643","id":"dev","n":"4929","note":"row1643"} +{"time":"1644","id":"dev","n":"4932","note":"row1644"} +{"time":"1645","id":"dev","n":"4935","note":"row1645"} +{"time":"1646","id":"dev","n":"4938","note":"row1646"} +{"time":"1647","id":"dev","n":"4941","note":"row1647"} +{"time":"1648","id":"dev","n":"4944","note":"row1648"} +{"time":"1649","id":"dev","n":"4947","note":"row1649"} +{"time":"1650","id":"dev","n":"4950","note":"row1650"} +{"time":"1651","id":"dev","n":"4953","note":"row1651"} +{"time":"1652","id":"dev","n":"4956","note":"row1652"} +{"time":"1653","id":"dev","n":"4959","note":"row1653"} +{"time":"1654","id":"dev","n":"4962","note":"row1654"} +{"time":"1655","id":"dev","n":"4965","note":"row1655"} +{"time":"1656","id":"dev","n":"4968","note":"row1656"} +{"time":"1657","id":"dev","n":"4971","note":"row1657"} +{"time":"1658","id":"dev","n":"4974","note":"row1658"} +{"time":"1659","id":"dev","n":"4977","note":"row1659"} +{"time":"1660","id":"dev","n":"4980","note":"row1660"} +{"time":"1661","id":"dev","n":"4983","note":"row1661"} +{"time":"1662","id":"dev","n":"4986","note":"row1662"} +{"time":"1663","id":"dev","n":"4989","note":"row1663"} +{"time":"1664","id":"dev","n":"4992","note":"row1664"} +{"time":"1665","id":"dev","n":"4995","note":"row1665"} +{"time":"1666","id":"dev","n":"4998","note":"row1666"} +{"time":"1667","id":"dev","n":"5001","note":"row1667"} +{"time":"1668","id":"dev","n":"5004","note":"row1668"} +{"time":"1669","id":"dev","n":"5007","note":"row1669"} +{"time":"1670","id":"dev","n":"5010","note":"row1670"} +{"time":"1671","id":"dev","n":"5013","note":"row1671"} +{"time":"1672","id":"dev","n":"5016","note":"row1672"} +{"time":"1673","id":"dev","n":"5019","note":"row1673"} +{"time":"1674","id":"dev","n":"5022","note":"row1674"} +{"time":"1675","id":"dev","n":"5025","note":"row1675"} +{"time":"1676","id":"dev","n":"5028","note":"row1676"} +{"time":"1677","id":"dev","n":"5031","note":"row1677"} +{"time":"1678","id":"dev","n":"5034","note":"row1678"} +{"time":"1679","id":"dev","n":"5037","note":"row1679"} +{"time":"1680","id":"dev","n":"5040","note":"row1680"} +{"time":"1681","id":"dev","n":"5043","note":"row1681"} +{"time":"1682","id":"dev","n":"5046","note":"row1682"} +{"time":"1683","id":"dev","n":"5049","note":"row1683"} +{"time":"1684","id":"dev","n":"5052","note":"row1684"} +{"time":"1685","id":"dev","n":"5055","note":"row1685"} +{"time":"1686","id":"dev","n":"5058","note":"row1686"} +{"time":"1687","id":"dev","n":"5061","note":"row1687"} +{"time":"1688","id":"dev","n":"5064","note":"row1688"} +{"time":"1689","id":"dev","n":"5067","note":"row1689"} +{"time":"1690","id":"dev","n":"5070","note":"row1690"} +{"time":"1691","id":"dev","n":"5073","note":"row1691"} +{"time":"1692","id":"dev","n":"5076","note":"row1692"} +{"time":"1693","id":"dev","n":"5079","note":"row1693"} +{"time":"1694","id":"dev","n":"5082","note":"row1694"} +{"time":"1695","id":"dev","n":"5085","note":"row1695"} +{"time":"1696","id":"dev","n":"5088","note":"row1696"} +{"time":"1697","id":"dev","n":"5091","note":"row1697"} +{"time":"1698","id":"dev","n":"5094","note":"row1698"} +{"time":"1699","id":"dev","n":"5097","note":"row1699"} +{"time":"1700","id":"dev","n":"5100","note":"row1700"} +{"time":"1701","id":"dev","n":"5103","note":"row1701"} +{"time":"1702","id":"dev","n":"5106","note":"row1702"} +{"time":"1703","id":"dev","n":"5109","note":"row1703"} +{"time":"1704","id":"dev","n":"5112","note":"row1704"} +{"time":"1705","id":"dev","n":"5115","note":"row1705"} +{"time":"1706","id":"dev","n":"5118","note":"row1706"} +{"time":"1707","id":"dev","n":"5121","note":"row1707"} +{"time":"1708","id":"dev","n":"5124","note":"row1708"} +{"time":"1709","id":"dev","n":"5127","note":"row1709"} +{"time":"1710","id":"dev","n":"5130","note":"row1710"} +{"time":"1711","id":"dev","n":"5133","note":"row1711"} +{"time":"1712","id":"dev","n":"5136","note":"row1712"} +{"time":"1713","id":"dev","n":"5139","note":"row1713"} +{"time":"1714","id":"dev","n":"5142","note":"row1714"} +{"time":"1715","id":"dev","n":"5145","note":"row1715"} +{"time":"1716","id":"dev","n":"5148","note":"row1716"} +{"time":"1717","id":"dev","n":"5151","note":"row1717"} +{"time":"1718","id":"dev","n":"5154","note":"row1718"} +{"time":"1719","id":"dev","n":"5157","note":"row1719"} +{"time":"1720","id":"dev","n":"5160","note":"row1720"} +{"time":"1721","id":"dev","n":"5163","note":"row1721"} +{"time":"1722","id":"dev","n":"5166","note":"row1722"} +{"time":"1723","id":"dev","n":"5169","note":"row1723"} +{"time":"1724","id":"dev","n":"5172","note":"row1724"} +{"time":"1725","id":"dev","n":"5175","note":"row1725"} +{"time":"1726","id":"dev","n":"5178","note":"row1726"} +{"time":"1727","id":"dev","n":"5181","note":"row1727"} +{"time":"1728","id":"dev","n":"5184","note":"row1728"} +{"time":"1729","id":"dev","n":"5187","note":"row1729"} +{"time":"1730","id":"dev","n":"5190","note":"row1730"} +{"time":"1731","id":"dev","n":"5193","note":"row1731"} +{"time":"1732","id":"dev","n":"5196","note":"row1732"} +{"time":"1733","id":"dev","n":"5199","note":"row1733"} +{"time":"1734","id":"dev","n":"5202","note":"row1734"} +{"time":"1735","id":"dev","n":"5205","note":"row1735"} +{"time":"1736","id":"dev","n":"5208","note":"row1736"} +{"time":"1737","id":"dev","n":"5211","note":"row1737"} +{"time":"1738","id":"dev","n":"5214","note":"row1738"} +{"time":"1739","id":"dev","n":"5217","note":"row1739"} +{"time":"1740","id":"dev","n":"5220","note":"row1740"} +{"time":"1741","id":"dev","n":"5223","note":"row1741"} +{"time":"1742","id":"dev","n":"5226","note":"row1742"} +{"time":"1743","id":"dev","n":"5229","note":"row1743"} +{"time":"1744","id":"dev","n":"5232","note":"row1744"} +{"time":"1745","id":"dev","n":"5235","note":"row1745"} +{"time":"1746","id":"dev","n":"5238","note":"row1746"} +{"time":"1747","id":"dev","n":"5241","note":"row1747"} +{"time":"1748","id":"dev","n":"5244","note":"row1748"} +{"time":"1749","id":"dev","n":"5247","note":"row1749"} +{"time":"1750","id":"dev","n":"5250","note":"row1750"} +{"time":"1751","id":"dev","n":"5253","note":"row1751"} +{"time":"1752","id":"dev","n":"5256","note":"row1752"} +{"time":"1753","id":"dev","n":"5259","note":"row1753"} +{"time":"1754","id":"dev","n":"5262","note":"row1754"} +{"time":"1755","id":"dev","n":"5265","note":"row1755"} +{"time":"1756","id":"dev","n":"5268","note":"row1756"} +{"time":"1757","id":"dev","n":"5271","note":"row1757"} +{"time":"1758","id":"dev","n":"5274","note":"row1758"} +{"time":"1759","id":"dev","n":"5277","note":"row1759"} +{"time":"1760","id":"dev","n":"5280","note":"row1760"} +{"time":"1761","id":"dev","n":"5283","note":"row1761"} +{"time":"1762","id":"dev","n":"5286","note":"row1762"} +{"time":"1763","id":"dev","n":"5289","note":"row1763"} +{"time":"1764","id":"dev","n":"5292","note":"row1764"} +{"time":"1765","id":"dev","n":"5295","note":"row1765"} +{"time":"1766","id":"dev","n":"5298","note":"row1766"} +{"time":"1767","id":"dev","n":"5301","note":"row1767"} +{"time":"1768","id":"dev","n":"5304","note":"row1768"} +{"time":"1769","id":"dev","n":"5307","note":"row1769"} +{"time":"1770","id":"dev","n":"5310","note":"row1770"} +{"time":"1771","id":"dev","n":"5313","note":"row1771"} +{"time":"1772","id":"dev","n":"5316","note":"row1772"} +{"time":"1773","id":"dev","n":"5319","note":"row1773"} +{"time":"1774","id":"dev","n":"5322","note":"row1774"} +{"time":"1775","id":"dev","n":"5325","note":"row1775"} +{"time":"1776","id":"dev","n":"5328","note":"row1776"} +{"time":"1777","id":"dev","n":"5331","note":"row1777"} +{"time":"1778","id":"dev","n":"5334","note":"row1778"} +{"time":"1779","id":"dev","n":"5337","note":"row1779"} +{"time":"1780","id":"dev","n":"5340","note":"row1780"} +{"time":"1781","id":"dev","n":"5343","note":"row1781"} +{"time":"1782","id":"dev","n":"5346","note":"row1782"} +{"time":"1783","id":"dev","n":"5349","note":"row1783"} +{"time":"1784","id":"dev","n":"5352","note":"row1784"} +{"time":"1785","id":"dev","n":"5355","note":"row1785"} +{"time":"1786","id":"dev","n":"5358","note":"row1786"} +{"time":"1787","id":"dev","n":"5361","note":"row1787"} +{"time":"1788","id":"dev","n":"5364","note":"row1788"} +{"time":"1789","id":"dev","n":"5367","note":"row1789"} +{"time":"1790","id":"dev","n":"5370","note":"row1790"} +{"time":"1791","id":"dev","n":"5373","note":"row1791"} +{"time":"1792","id":"dev","n":"5376","note":"row1792"} +{"time":"1793","id":"dev","n":"5379","note":"row1793"} +{"time":"1794","id":"dev","n":"5382","note":"row1794"} +{"time":"1795","id":"dev","n":"5385","note":"row1795"} +{"time":"1796","id":"dev","n":"5388","note":"row1796"} +{"time":"1797","id":"dev","n":"5391","note":"row1797"} +{"time":"1798","id":"dev","n":"5394","note":"row1798"} +{"time":"1799","id":"dev","n":"5397","note":"row1799"} +{"time":"1800","id":"dev","n":"5400","note":"row1800"} +{"time":"1801","id":"dev","n":"5403","note":"row1801"} +{"time":"1802","id":"dev","n":"5406","note":"row1802"} +{"time":"1803","id":"dev","n":"5409","note":"row1803"} +{"time":"1804","id":"dev","n":"5412","note":"row1804"} +{"time":"1805","id":"dev","n":"5415","note":"row1805"} +{"time":"1806","id":"dev","n":"5418","note":"row1806"} +{"time":"1807","id":"dev","n":"5421","note":"row1807"} +{"time":"1808","id":"dev","n":"5424","note":"row1808"} +{"time":"1809","id":"dev","n":"5427","note":"row1809"} +{"time":"1810","id":"dev","n":"5430","note":"row1810"} +{"time":"1811","id":"dev","n":"5433","note":"row1811"} +{"time":"1812","id":"dev","n":"5436","note":"row1812"} +{"time":"1813","id":"dev","n":"5439","note":"row1813"} +{"time":"1814","id":"dev","n":"5442","note":"row1814"} +{"time":"1815","id":"dev","n":"5445","note":"row1815"} +{"time":"1816","id":"dev","n":"5448","note":"row1816"} +{"time":"1817","id":"dev","n":"5451","note":"row1817"} +{"time":"1818","id":"dev","n":"5454","note":"row1818"} +{"time":"1819","id":"dev","n":"5457","note":"row1819"} +{"time":"1820","id":"dev","n":"5460","note":"row1820"} +{"time":"1821","id":"dev","n":"5463","note":"row1821"} +{"time":"1822","id":"dev","n":"5466","note":"row1822"} +{"time":"1823","id":"dev","n":"5469","note":"row1823"} +{"time":"1824","id":"dev","n":"5472","note":"row1824"} +{"time":"1825","id":"dev","n":"5475","note":"row1825"} +{"time":"1826","id":"dev","n":"5478","note":"row1826"} +{"time":"1827","id":"dev","n":"5481","note":"row1827"} +{"time":"1828","id":"dev","n":"5484","note":"row1828"} +{"time":"1829","id":"dev","n":"5487","note":"row1829"} +{"time":"1830","id":"dev","n":"5490","note":"row1830"} +{"time":"1831","id":"dev","n":"5493","note":"row1831"} +{"time":"1832","id":"dev","n":"5496","note":"row1832"} +{"time":"1833","id":"dev","n":"5499","note":"row1833"} +{"time":"1834","id":"dev","n":"5502","note":"row1834"} +{"time":"1835","id":"dev","n":"5505","note":"row1835"} +{"time":"1836","id":"dev","n":"5508","note":"row1836"} +{"time":"1837","id":"dev","n":"5511","note":"row1837"} +{"time":"1838","id":"dev","n":"5514","note":"row1838"} +{"time":"1839","id":"dev","n":"5517","note":"row1839"} +{"time":"1840","id":"dev","n":"5520","note":"row1840"} +{"time":"1841","id":"dev","n":"5523","note":"row1841"} +{"time":"1842","id":"dev","n":"5526","note":"row1842"} +{"time":"1843","id":"dev","n":"5529","note":"row1843"} +{"time":"1844","id":"dev","n":"5532","note":"row1844"} +{"time":"1845","id":"dev","n":"5535","note":"row1845"} +{"time":"1846","id":"dev","n":"5538","note":"row1846"} +{"time":"1847","id":"dev","n":"5541","note":"row1847"} +{"time":"1848","id":"dev","n":"5544","note":"row1848"} +{"time":"1849","id":"dev","n":"5547","note":"row1849"} +{"time":"1850","id":"dev","n":"5550","note":"row1850"} +{"time":"1851","id":"dev","n":"5553","note":"row1851"} +{"time":"1852","id":"dev","n":"5556","note":"row1852"} +{"time":"1853","id":"dev","n":"5559","note":"row1853"} +{"time":"1854","id":"dev","n":"5562","note":"row1854"} +{"time":"1855","id":"dev","n":"5565","note":"row1855"} +{"time":"1856","id":"dev","n":"5568","note":"row1856"} +{"time":"1857","id":"dev","n":"5571","note":"row1857"} +{"time":"1858","id":"dev","n":"5574","note":"row1858"} +{"time":"1859","id":"dev","n":"5577","note":"row1859"} +{"time":"1860","id":"dev","n":"5580","note":"row1860"} +{"time":"1861","id":"dev","n":"5583","note":"row1861"} +{"time":"1862","id":"dev","n":"5586","note":"row1862"} +{"time":"1863","id":"dev","n":"5589","note":"row1863"} +{"time":"1864","id":"dev","n":"5592","note":"row1864"} +{"time":"1865","id":"dev","n":"5595","note":"row1865"} +{"time":"1866","id":"dev","n":"5598","note":"row1866"} +{"time":"1867","id":"dev","n":"5601","note":"row1867"} +{"time":"1868","id":"dev","n":"5604","note":"row1868"} +{"time":"1869","id":"dev","n":"5607","note":"row1869"} +{"time":"1870","id":"dev","n":"5610","note":"row1870"} +{"time":"1871","id":"dev","n":"5613","note":"row1871"} +{"time":"1872","id":"dev","n":"5616","note":"row1872"} +{"time":"1873","id":"dev","n":"5619","note":"row1873"} +{"time":"1874","id":"dev","n":"5622","note":"row1874"} +{"time":"1875","id":"dev","n":"5625","note":"row1875"} +{"time":"1876","id":"dev","n":"5628","note":"row1876"} +{"time":"1877","id":"dev","n":"5631","note":"row1877"} +{"time":"1878","id":"dev","n":"5634","note":"row1878"} +{"time":"1879","id":"dev","n":"5637","note":"row1879"} +{"time":"1880","id":"dev","n":"5640","note":"row1880"} +{"time":"1881","id":"dev","n":"5643","note":"row1881"} +{"time":"1882","id":"dev","n":"5646","note":"row1882"} +{"time":"1883","id":"dev","n":"5649","note":"row1883"} +{"time":"1884","id":"dev","n":"5652","note":"row1884"} +{"time":"1885","id":"dev","n":"5655","note":"row1885"} +{"time":"1886","id":"dev","n":"5658","note":"row1886"} +{"time":"1887","id":"dev","n":"5661","note":"row1887"} +{"time":"1888","id":"dev","n":"5664","note":"row1888"} +{"time":"1889","id":"dev","n":"5667","note":"row1889"} +{"time":"1890","id":"dev","n":"5670","note":"row1890"} +{"time":"1891","id":"dev","n":"5673","note":"row1891"} +{"time":"1892","id":"dev","n":"5676","note":"row1892"} +{"time":"1893","id":"dev","n":"5679","note":"row1893"} +{"time":"1894","id":"dev","n":"5682","note":"row1894"} +{"time":"1895","id":"dev","n":"5685","note":"row1895"} +{"time":"1896","id":"dev","n":"5688","note":"row1896"} +{"time":"1897","id":"dev","n":"5691","note":"row1897"} +{"time":"1898","id":"dev","n":"5694","note":"row1898"} +{"time":"1899","id":"dev","n":"5697","note":"row1899"} +{"time":"1900","id":"dev","n":"5700","note":"row1900"} +{"time":"1901","id":"dev","n":"5703","note":"row1901"} +{"time":"1902","id":"dev","n":"5706","note":"row1902"} +{"time":"1903","id":"dev","n":"5709","note":"row1903"} +{"time":"1904","id":"dev","n":"5712","note":"row1904"} +{"time":"1905","id":"dev","n":"5715","note":"row1905"} +{"time":"1906","id":"dev","n":"5718","note":"row1906"} +{"time":"1907","id":"dev","n":"5721","note":"row1907"} +{"time":"1908","id":"dev","n":"5724","note":"row1908"} +{"time":"1909","id":"dev","n":"5727","note":"row1909"} +{"time":"1910","id":"dev","n":"5730","note":"row1910"} +{"time":"1911","id":"dev","n":"5733","note":"row1911"} +{"time":"1912","id":"dev","n":"5736","note":"row1912"} +{"time":"1913","id":"dev","n":"5739","note":"row1913"} +{"time":"1914","id":"dev","n":"5742","note":"row1914"} +{"time":"1915","id":"dev","n":"5745","note":"row1915"} +{"time":"1916","id":"dev","n":"5748","note":"row1916"} +{"time":"1917","id":"dev","n":"5751","note":"row1917"} +{"time":"1918","id":"dev","n":"5754","note":"row1918"} +{"time":"1919","id":"dev","n":"5757","note":"row1919"} +{"time":"1920","id":"dev","n":"5760","note":"row1920"} +{"time":"1921","id":"dev","n":"5763","note":"row1921"} +{"time":"1922","id":"dev","n":"5766","note":"row1922"} +{"time":"1923","id":"dev","n":"5769","note":"row1923"} +{"time":"1924","id":"dev","n":"5772","note":"row1924"} +{"time":"1925","id":"dev","n":"5775","note":"row1925"} +{"time":"1926","id":"dev","n":"5778","note":"row1926"} +{"time":"1927","id":"dev","n":"5781","note":"row1927"} +{"time":"1928","id":"dev","n":"5784","note":"row1928"} +{"time":"1929","id":"dev","n":"5787","note":"row1929"} +{"time":"1930","id":"dev","n":"5790","note":"row1930"} +{"time":"1931","id":"dev","n":"5793","note":"row1931"} +{"time":"1932","id":"dev","n":"5796","note":"row1932"} +{"time":"1933","id":"dev","n":"5799","note":"row1933"} +{"time":"1934","id":"dev","n":"5802","note":"row1934"} +{"time":"1935","id":"dev","n":"5805","note":"row1935"} +{"time":"1936","id":"dev","n":"5808","note":"row1936"} +{"time":"1937","id":"dev","n":"5811","note":"row1937"} +{"time":"1938","id":"dev","n":"5814","note":"row1938"} +{"time":"1939","id":"dev","n":"5817","note":"row1939"} +{"time":"1940","id":"dev","n":"5820","note":"row1940"} +{"time":"1941","id":"dev","n":"5823","note":"row1941"} +{"time":"1942","id":"dev","n":"5826","note":"row1942"} +{"time":"1943","id":"dev","n":"5829","note":"row1943"} +{"time":"1944","id":"dev","n":"5832","note":"row1944"} +{"time":"1945","id":"dev","n":"5835","note":"row1945"} +{"time":"1946","id":"dev","n":"5838","note":"row1946"} +{"time":"1947","id":"dev","n":"5841","note":"row1947"} +{"time":"1948","id":"dev","n":"5844","note":"row1948"} +{"time":"1949","id":"dev","n":"5847","note":"row1949"} +{"time":"1950","id":"dev","n":"5850","note":"row1950"} +{"time":"1951","id":"dev","n":"5853","note":"row1951"} +{"time":"1952","id":"dev","n":"5856","note":"row1952"} +{"time":"1953","id":"dev","n":"5859","note":"row1953"} +{"time":"1954","id":"dev","n":"5862","note":"row1954"} +{"time":"1955","id":"dev","n":"5865","note":"row1955"} +{"time":"1956","id":"dev","n":"5868","note":"row1956"} +{"time":"1957","id":"dev","n":"5871","note":"row1957"} +{"time":"1958","id":"dev","n":"5874","note":"row1958"} +{"time":"1959","id":"dev","n":"5877","note":"row1959"} +{"time":"1960","id":"dev","n":"5880","note":"row1960"} +{"time":"1961","id":"dev","n":"5883","note":"row1961"} +{"time":"1962","id":"dev","n":"5886","note":"row1962"} +{"time":"1963","id":"dev","n":"5889","note":"row1963"} +{"time":"1964","id":"dev","n":"5892","note":"row1964"} +{"time":"1965","id":"dev","n":"5895","note":"row1965"} +{"time":"1966","id":"dev","n":"5898","note":"row1966"} +{"time":"1967","id":"dev","n":"5901","note":"row1967"} +{"time":"1968","id":"dev","n":"5904","note":"row1968"} +{"time":"1969","id":"dev","n":"5907","note":"row1969"} +{"time":"1970","id":"dev","n":"5910","note":"row1970"} +{"time":"1971","id":"dev","n":"5913","note":"row1971"} +{"time":"1972","id":"dev","n":"5916","note":"row1972"} +{"time":"1973","id":"dev","n":"5919","note":"row1973"} +{"time":"1974","id":"dev","n":"5922","note":"row1974"} +{"time":"1975","id":"dev","n":"5925","note":"row1975"} +{"time":"1976","id":"dev","n":"5928","note":"row1976"} +{"time":"1977","id":"dev","n":"5931","note":"row1977"} +{"time":"1978","id":"dev","n":"5934","note":"row1978"} +{"time":"1979","id":"dev","n":"5937","note":"row1979"} +{"time":"1980","id":"dev","n":"5940","note":"row1980"} +{"time":"1981","id":"dev","n":"5943","note":"row1981"} +{"time":"1982","id":"dev","n":"5946","note":"row1982"} +{"time":"1983","id":"dev","n":"5949","note":"row1983"} +{"time":"1984","id":"dev","n":"5952","note":"row1984"} +{"time":"1985","id":"dev","n":"5955","note":"row1985"} +{"time":"1986","id":"dev","n":"5958","note":"row1986"} +{"time":"1987","id":"dev","n":"5961","note":"row1987"} +{"time":"1988","id":"dev","n":"5964","note":"row1988"} +{"time":"1989","id":"dev","n":"5967","note":"row1989"} +{"time":"1990","id":"dev","n":"5970","note":"row1990"} +{"time":"1991","id":"dev","n":"5973","note":"row1991"} +{"time":"1992","id":"dev","n":"5976","note":"row1992"} +{"time":"1993","id":"dev","n":"5979","note":"row1993"} +{"time":"1994","id":"dev","n":"5982","note":"row1994"} +{"time":"1995","id":"dev","n":"5985","note":"row1995"} +{"time":"1996","id":"dev","n":"5988","note":"row1996"} +{"time":"1997","id":"dev","n":"5991","note":"row1997"} +{"time":"1998","id":"dev","n":"5994","note":"row1998"} +{"time":"1999","id":"dev","n":"5997","note":"row1999"} +{"time":"2000","id":"dev","n":"6000","note":"row2000"} +{"time":"2001","id":"dev","n":"6003","note":"row2001"} +{"time":"2002","id":"dev","n":"6006","note":"row2002"} +{"time":"2003","id":"dev","n":"6009","note":"row2003"} +{"time":"2004","id":"dev","n":"6012","note":"row2004"} +{"time":"2005","id":"dev","n":"6015","note":"row2005"} +{"time":"2006","id":"dev","n":"6018","note":"row2006"} +{"time":"2007","id":"dev","n":"6021","note":"row2007"} +{"time":"2008","id":"dev","n":"6024","note":"row2008"} +{"time":"2009","id":"dev","n":"6027","note":"row2009"} +{"time":"2010","id":"dev","n":"6030","note":"row2010"} +{"time":"2011","id":"dev","n":"6033","note":"row2011"} +{"time":"2012","id":"dev","n":"6036","note":"row2012"} +{"time":"2013","id":"dev","n":"6039","note":"row2013"} +{"time":"2014","id":"dev","n":"6042","note":"row2014"} +{"time":"2015","id":"dev","n":"6045","note":"row2015"} +{"time":"2016","id":"dev","n":"6048","note":"row2016"} +{"time":"2017","id":"dev","n":"6051","note":"row2017"} +{"time":"2018","id":"dev","n":"6054","note":"row2018"} +{"time":"2019","id":"dev","n":"6057","note":"row2019"} +{"time":"2020","id":"dev","n":"6060","note":"row2020"} +{"time":"2021","id":"dev","n":"6063","note":"row2021"} +{"time":"2022","id":"dev","n":"6066","note":"row2022"} +{"time":"2023","id":"dev","n":"6069","note":"row2023"} +{"time":"2024","id":"dev","n":"6072","note":"row2024"} +{"time":"2025","id":"dev","n":"6075","note":"row2025"} +{"time":"2026","id":"dev","n":"6078","note":"row2026"} +{"time":"2027","id":"dev","n":"6081","note":"row2027"} +{"time":"2028","id":"dev","n":"6084","note":"row2028"} +{"time":"2029","id":"dev","n":"6087","note":"row2029"} +{"time":"2030","id":"dev","n":"6090","note":"row2030"} +{"time":"2031","id":"dev","n":"6093","note":"row2031"} +{"time":"2032","id":"dev","n":"6096","note":"row2032"} +{"time":"2033","id":"dev","n":"6099","note":"row2033"} +{"time":"2034","id":"dev","n":"6102","note":"row2034"} +{"time":"2035","id":"dev","n":"6105","note":"row2035"} +{"time":"2036","id":"dev","n":"6108","note":"row2036"} +{"time":"2037","id":"dev","n":"6111","note":"row2037"} +{"time":"2038","id":"dev","n":"6114","note":"row2038"} +{"time":"2039","id":"dev","n":"6117","note":"row2039"} +{"time":"2040","id":"dev","n":"6120","note":"row2040"} +{"time":"2041","id":"dev","n":"6123","note":"row2041"} +{"time":"2042","id":"dev","n":"6126","note":"row2042"} +{"time":"2043","id":"dev","n":"6129","note":"row2043"} +{"time":"2044","id":"dev","n":"6132","note":"row2044"} +{"time":"2045","id":"dev","n":"6135","note":"row2045"} +{"time":"2046","id":"dev","n":"6138","note":"row2046"} +{"time":"2047","id":"dev","n":"6141","note":"row2047"} +{"time":"2048","id":"dev","n":"6144","note":"row2048"} +{"time":"2049","id":"dev","n":"6147","note":"row2049"} +{"time":"2050","id":"dev","n":"6150","note":"row2050"} +{"time":"2051","id":"dev","n":"6153","note":"row2051"} +{"time":"2052","id":"dev","n":"6156","note":"row2052"} +{"time":"2053","id":"dev","n":"6159","note":"row2053"} +{"time":"2054","id":"dev","n":"6162","note":"row2054"} +{"time":"2055","id":"dev","n":"6165","note":"row2055"} +{"time":"2056","id":"dev","n":"6168","note":"row2056"} +{"time":"2057","id":"dev","n":"6171","note":"row2057"} +{"time":"2058","id":"dev","n":"6174","note":"row2058"} +{"time":"2059","id":"dev","n":"6177","note":"row2059"} +{"time":"2060","id":"dev","n":"6180","note":"row2060"} +{"time":"2061","id":"dev","n":"6183","note":"row2061"} +{"time":"2062","id":"dev","n":"6186","note":"row2062"} +{"time":"2063","id":"dev","n":"6189","note":"row2063"} +{"time":"2064","id":"dev","n":"6192","note":"row2064"} +{"time":"2065","id":"dev","n":"6195","note":"row2065"} +{"time":"2066","id":"dev","n":"6198","note":"row2066"} +{"time":"2067","id":"dev","n":"6201","note":"row2067"} +{"time":"2068","id":"dev","n":"6204","note":"row2068"} +{"time":"2069","id":"dev","n":"6207","note":"row2069"} +{"time":"2070","id":"dev","n":"6210","note":"row2070"} +{"time":"2071","id":"dev","n":"6213","note":"row2071"} +{"time":"2072","id":"dev","n":"6216","note":"row2072"} +{"time":"2073","id":"dev","n":"6219","note":"row2073"} +{"time":"2074","id":"dev","n":"6222","note":"row2074"} +{"time":"2075","id":"dev","n":"6225","note":"row2075"} +{"time":"2076","id":"dev","n":"6228","note":"row2076"} +{"time":"2077","id":"dev","n":"6231","note":"row2077"} +{"time":"2078","id":"dev","n":"6234","note":"row2078"} +{"time":"2079","id":"dev","n":"6237","note":"row2079"} +{"time":"2080","id":"dev","n":"6240","note":"row2080"} +{"time":"2081","id":"dev","n":"6243","note":"row2081"} +{"time":"2082","id":"dev","n":"6246","note":"row2082"} +{"time":"2083","id":"dev","n":"6249","note":"row2083"} +{"time":"2084","id":"dev","n":"6252","note":"row2084"} +{"time":"2085","id":"dev","n":"6255","note":"row2085"} +{"time":"2086","id":"dev","n":"6258","note":"row2086"} +{"time":"2087","id":"dev","n":"6261","note":"row2087"} +{"time":"2088","id":"dev","n":"6264","note":"row2088"} +{"time":"2089","id":"dev","n":"6267","note":"row2089"} +{"time":"2090","id":"dev","n":"6270","note":"row2090"} +{"time":"2091","id":"dev","n":"6273","note":"row2091"} +{"time":"2092","id":"dev","n":"6276","note":"row2092"} +{"time":"2093","id":"dev","n":"6279","note":"row2093"} +{"time":"2094","id":"dev","n":"6282","note":"row2094"} +{"time":"2095","id":"dev","n":"6285","note":"row2095"} +{"time":"2096","id":"dev","n":"6288","note":"row2096"} +{"time":"2097","id":"dev","n":"6291","note":"row2097"} +{"time":"2098","id":"dev","n":"6294","note":"row2098"} +{"time":"2099","id":"dev","n":"6297","note":"row2099"} +{"time":"2100","id":"dev","n":"6300","note":"row2100"} +{"time":"2101","id":"dev","n":"6303","note":"row2101"} +{"time":"2102","id":"dev","n":"6306","note":"row2102"} +{"time":"2103","id":"dev","n":"6309","note":"row2103"} +{"time":"2104","id":"dev","n":"6312","note":"row2104"} +{"time":"2105","id":"dev","n":"6315","note":"row2105"} +{"time":"2106","id":"dev","n":"6318","note":"row2106"} +{"time":"2107","id":"dev","n":"6321","note":"row2107"} +{"time":"2108","id":"dev","n":"6324","note":"row2108"} +{"time":"2109","id":"dev","n":"6327","note":"row2109"} +{"time":"2110","id":"dev","n":"6330","note":"row2110"} +{"time":"2111","id":"dev","n":"6333","note":"row2111"} +{"time":"2112","id":"dev","n":"6336","note":"row2112"} +{"time":"2113","id":"dev","n":"6339","note":"row2113"} +{"time":"2114","id":"dev","n":"6342","note":"row2114"} +{"time":"2115","id":"dev","n":"6345","note":"row2115"} +{"time":"2116","id":"dev","n":"6348","note":"row2116"} +{"time":"2117","id":"dev","n":"6351","note":"row2117"} +{"time":"2118","id":"dev","n":"6354","note":"row2118"} +{"time":"2119","id":"dev","n":"6357","note":"row2119"} +{"time":"2120","id":"dev","n":"6360","note":"row2120"} +{"time":"2121","id":"dev","n":"6363","note":"row2121"} +{"time":"2122","id":"dev","n":"6366","note":"row2122"} +{"time":"2123","id":"dev","n":"6369","note":"row2123"} +{"time":"2124","id":"dev","n":"6372","note":"row2124"} +{"time":"2125","id":"dev","n":"6375","note":"row2125"} +{"time":"2126","id":"dev","n":"6378","note":"row2126"} +{"time":"2127","id":"dev","n":"6381","note":"row2127"} +{"time":"2128","id":"dev","n":"6384","note":"row2128"} +{"time":"2129","id":"dev","n":"6387","note":"row2129"} +{"time":"2130","id":"dev","n":"6390","note":"row2130"} +{"time":"2131","id":"dev","n":"6393","note":"row2131"} +{"time":"2132","id":"dev","n":"6396","note":"row2132"} +{"time":"2133","id":"dev","n":"6399","note":"row2133"} +{"time":"2134","id":"dev","n":"6402","note":"row2134"} +{"time":"2135","id":"dev","n":"6405","note":"row2135"} +{"time":"2136","id":"dev","n":"6408","note":"row2136"} +{"time":"2137","id":"dev","n":"6411","note":"row2137"} +{"time":"2138","id":"dev","n":"6414","note":"row2138"} +{"time":"2139","id":"dev","n":"6417","note":"row2139"} +{"time":"2140","id":"dev","n":"6420","note":"row2140"} +{"time":"2141","id":"dev","n":"6423","note":"row2141"} +{"time":"2142","id":"dev","n":"6426","note":"row2142"} +{"time":"2143","id":"dev","n":"6429","note":"row2143"} +{"time":"2144","id":"dev","n":"6432","note":"row2144"} +{"time":"2145","id":"dev","n":"6435","note":"row2145"} +{"time":"2146","id":"dev","n":"6438","note":"row2146"} +{"time":"2147","id":"dev","n":"6441","note":"row2147"} +{"time":"2148","id":"dev","n":"6444","note":"row2148"} +{"time":"2149","id":"dev","n":"6447","note":"row2149"} +{"time":"2150","id":"dev","n":"6450","note":"row2150"} +{"time":"2151","id":"dev","n":"6453","note":"row2151"} +{"time":"2152","id":"dev","n":"6456","note":"row2152"} +{"time":"2153","id":"dev","n":"6459","note":"row2153"} +{"time":"2154","id":"dev","n":"6462","note":"row2154"} +{"time":"2155","id":"dev","n":"6465","note":"row2155"} +{"time":"2156","id":"dev","n":"6468","note":"row2156"} +{"time":"2157","id":"dev","n":"6471","note":"row2157"} +{"time":"2158","id":"dev","n":"6474","note":"row2158"} +{"time":"2159","id":"dev","n":"6477","note":"row2159"} +{"time":"2160","id":"dev","n":"6480","note":"row2160"} +{"time":"2161","id":"dev","n":"6483","note":"row2161"} +{"time":"2162","id":"dev","n":"6486","note":"row2162"} +{"time":"2163","id":"dev","n":"6489","note":"row2163"} +{"time":"2164","id":"dev","n":"6492","note":"row2164"} +{"time":"2165","id":"dev","n":"6495","note":"row2165"} +{"time":"2166","id":"dev","n":"6498","note":"row2166"} +{"time":"2167","id":"dev","n":"6501","note":"row2167"} +{"time":"2168","id":"dev","n":"6504","note":"row2168"} +{"time":"2169","id":"dev","n":"6507","note":"row2169"} +{"time":"2170","id":"dev","n":"6510","note":"row2170"} +{"time":"2171","id":"dev","n":"6513","note":"row2171"} +{"time":"2172","id":"dev","n":"6516","note":"row2172"} +{"time":"2173","id":"dev","n":"6519","note":"row2173"} +{"time":"2174","id":"dev","n":"6522","note":"row2174"} +{"time":"2175","id":"dev","n":"6525","note":"row2175"} +{"time":"2176","id":"dev","n":"6528","note":"row2176"} +{"time":"2177","id":"dev","n":"6531","note":"row2177"} +{"time":"2178","id":"dev","n":"6534","note":"row2178"} +{"time":"2179","id":"dev","n":"6537","note":"row2179"} +{"time":"2180","id":"dev","n":"6540","note":"row2180"} +{"time":"2181","id":"dev","n":"6543","note":"row2181"} +{"time":"2182","id":"dev","n":"6546","note":"row2182"} +{"time":"2183","id":"dev","n":"6549","note":"row2183"} +{"time":"2184","id":"dev","n":"6552","note":"row2184"} +{"time":"2185","id":"dev","n":"6555","note":"row2185"} +{"time":"2186","id":"dev","n":"6558","note":"row2186"} +{"time":"2187","id":"dev","n":"6561","note":"row2187"} +{"time":"2188","id":"dev","n":"6564","note":"row2188"} +{"time":"2189","id":"dev","n":"6567","note":"row2189"} +{"time":"2190","id":"dev","n":"6570","note":"row2190"} +{"time":"2191","id":"dev","n":"6573","note":"row2191"} +{"time":"2192","id":"dev","n":"6576","note":"row2192"} +{"time":"2193","id":"dev","n":"6579","note":"row2193"} +{"time":"2194","id":"dev","n":"6582","note":"row2194"} +{"time":"2195","id":"dev","n":"6585","note":"row2195"} +{"time":"2196","id":"dev","n":"6588","note":"row2196"} +{"time":"2197","id":"dev","n":"6591","note":"row2197"} +{"time":"2198","id":"dev","n":"6594","note":"row2198"} +{"time":"2199","id":"dev","n":"6597","note":"row2199"} +{"time":"2200","id":"dev","n":"6600","note":"row2200"} +{"time":"2201","id":"dev","n":"6603","note":"row2201"} +{"time":"2202","id":"dev","n":"6606","note":"row2202"} +{"time":"2203","id":"dev","n":"6609","note":"row2203"} +{"time":"2204","id":"dev","n":"6612","note":"row2204"} +{"time":"2205","id":"dev","n":"6615","note":"row2205"} +{"time":"2206","id":"dev","n":"6618","note":"row2206"} +{"time":"2207","id":"dev","n":"6621","note":"row2207"} +{"time":"2208","id":"dev","n":"6624","note":"row2208"} +{"time":"2209","id":"dev","n":"6627","note":"row2209"} +{"time":"2210","id":"dev","n":"6630","note":"row2210"} +{"time":"2211","id":"dev","n":"6633","note":"row2211"} +{"time":"2212","id":"dev","n":"6636","note":"row2212"} +{"time":"2213","id":"dev","n":"6639","note":"row2213"} +{"time":"2214","id":"dev","n":"6642","note":"row2214"} +{"time":"2215","id":"dev","n":"6645","note":"row2215"} +{"time":"2216","id":"dev","n":"6648","note":"row2216"} +{"time":"2217","id":"dev","n":"6651","note":"row2217"} +{"time":"2218","id":"dev","n":"6654","note":"row2218"} +{"time":"2219","id":"dev","n":"6657","note":"row2219"} +{"time":"2220","id":"dev","n":"6660","note":"row2220"} +{"time":"2221","id":"dev","n":"6663","note":"row2221"} +{"time":"2222","id":"dev","n":"6666","note":"row2222"} +{"time":"2223","id":"dev","n":"6669","note":"row2223"} +{"time":"2224","id":"dev","n":"6672","note":"row2224"} +{"time":"2225","id":"dev","n":"6675","note":"row2225"} +{"time":"2226","id":"dev","n":"6678","note":"row2226"} +{"time":"2227","id":"dev","n":"6681","note":"row2227"} +{"time":"2228","id":"dev","n":"6684","note":"row2228"} +{"time":"2229","id":"dev","n":"6687","note":"row2229"} +{"time":"2230","id":"dev","n":"6690","note":"row2230"} +{"time":"2231","id":"dev","n":"6693","note":"row2231"} +{"time":"2232","id":"dev","n":"6696","note":"row2232"} +{"time":"2233","id":"dev","n":"6699","note":"row2233"} +{"time":"2234","id":"dev","n":"6702","note":"row2234"} +{"time":"2235","id":"dev","n":"6705","note":"row2235"} +{"time":"2236","id":"dev","n":"6708","note":"row2236"} +{"time":"2237","id":"dev","n":"6711","note":"row2237"} +{"time":"2238","id":"dev","n":"6714","note":"row2238"} +{"time":"2239","id":"dev","n":"6717","note":"row2239"} +{"time":"2240","id":"dev","n":"6720","note":"row2240"} +{"time":"2241","id":"dev","n":"6723","note":"row2241"} +{"time":"2242","id":"dev","n":"6726","note":"row2242"} +{"time":"2243","id":"dev","n":"6729","note":"row2243"} +{"time":"2244","id":"dev","n":"6732","note":"row2244"} +{"time":"2245","id":"dev","n":"6735","note":"row2245"} +{"time":"2246","id":"dev","n":"6738","note":"row2246"} +{"time":"2247","id":"dev","n":"6741","note":"row2247"} +{"time":"2248","id":"dev","n":"6744","note":"row2248"} +{"time":"2249","id":"dev","n":"6747","note":"row2249"} +{"time":"2250","id":"dev","n":"6750","note":"row2250"} +{"time":"2251","id":"dev","n":"6753","note":"row2251"} +{"time":"2252","id":"dev","n":"6756","note":"row2252"} +{"time":"2253","id":"dev","n":"6759","note":"row2253"} +{"time":"2254","id":"dev","n":"6762","note":"row2254"} +{"time":"2255","id":"dev","n":"6765","note":"row2255"} +{"time":"2256","id":"dev","n":"6768","note":"row2256"} +{"time":"2257","id":"dev","n":"6771","note":"row2257"} +{"time":"2258","id":"dev","n":"6774","note":"row2258"} +{"time":"2259","id":"dev","n":"6777","note":"row2259"} +{"time":"2260","id":"dev","n":"6780","note":"row2260"} +{"time":"2261","id":"dev","n":"6783","note":"row2261"} +{"time":"2262","id":"dev","n":"6786","note":"row2262"} +{"time":"2263","id":"dev","n":"6789","note":"row2263"} +{"time":"2264","id":"dev","n":"6792","note":"row2264"} +{"time":"2265","id":"dev","n":"6795","note":"row2265"} +{"time":"2266","id":"dev","n":"6798","note":"row2266"} +{"time":"2267","id":"dev","n":"6801","note":"row2267"} +{"time":"2268","id":"dev","n":"6804","note":"row2268"} +{"time":"2269","id":"dev","n":"6807","note":"row2269"} +{"time":"2270","id":"dev","n":"6810","note":"row2270"} +{"time":"2271","id":"dev","n":"6813","note":"row2271"} +{"time":"2272","id":"dev","n":"6816","note":"row2272"} +{"time":"2273","id":"dev","n":"6819","note":"row2273"} +{"time":"2274","id":"dev","n":"6822","note":"row2274"} +{"time":"2275","id":"dev","n":"6825","note":"row2275"} +{"time":"2276","id":"dev","n":"6828","note":"row2276"} +{"time":"2277","id":"dev","n":"6831","note":"row2277"} +{"time":"2278","id":"dev","n":"6834","note":"row2278"} +{"time":"2279","id":"dev","n":"6837","note":"row2279"} +{"time":"2280","id":"dev","n":"6840","note":"row2280"} +{"time":"2281","id":"dev","n":"6843","note":"row2281"} +{"time":"2282","id":"dev","n":"6846","note":"row2282"} +{"time":"2283","id":"dev","n":"6849","note":"row2283"} +{"time":"2284","id":"dev","n":"6852","note":"row2284"} +{"time":"2285","id":"dev","n":"6855","note":"row2285"} +{"time":"2286","id":"dev","n":"6858","note":"row2286"} +{"time":"2287","id":"dev","n":"6861","note":"row2287"} +{"time":"2288","id":"dev","n":"6864","note":"row2288"} +{"time":"2289","id":"dev","n":"6867","note":"row2289"} +{"time":"2290","id":"dev","n":"6870","note":"row2290"} +{"time":"2291","id":"dev","n":"6873","note":"row2291"} +{"time":"2292","id":"dev","n":"6876","note":"row2292"} +{"time":"2293","id":"dev","n":"6879","note":"row2293"} +{"time":"2294","id":"dev","n":"6882","note":"row2294"} +{"time":"2295","id":"dev","n":"6885","note":"row2295"} +{"time":"2296","id":"dev","n":"6888","note":"row2296"} +{"time":"2297","id":"dev","n":"6891","note":"row2297"} +{"time":"2298","id":"dev","n":"6894","note":"row2298"} +{"time":"2299","id":"dev","n":"6897","note":"row2299"} +{"time":"2300","id":"dev","n":"6900","note":"row2300"} +{"time":"2301","id":"dev","n":"6903","note":"row2301"} +{"time":"2302","id":"dev","n":"6906","note":"row2302"} +{"time":"2303","id":"dev","n":"6909","note":"row2303"} +{"time":"2304","id":"dev","n":"6912","note":"row2304"} +{"time":"2305","id":"dev","n":"6915","note":"row2305"} +{"time":"2306","id":"dev","n":"6918","note":"row2306"} +{"time":"2307","id":"dev","n":"6921","note":"row2307"} +{"time":"2308","id":"dev","n":"6924","note":"row2308"} +{"time":"2309","id":"dev","n":"6927","note":"row2309"} +{"time":"2310","id":"dev","n":"6930","note":"row2310"} +{"time":"2311","id":"dev","n":"6933","note":"row2311"} +{"time":"2312","id":"dev","n":"6936","note":"row2312"} +{"time":"2313","id":"dev","n":"6939","note":"row2313"} +{"time":"2314","id":"dev","n":"6942","note":"row2314"} +{"time":"2315","id":"dev","n":"6945","note":"row2315"} +{"time":"2316","id":"dev","n":"6948","note":"row2316"} +{"time":"2317","id":"dev","n":"6951","note":"row2317"} +{"time":"2318","id":"dev","n":"6954","note":"row2318"} +{"time":"2319","id":"dev","n":"6957","note":"row2319"} +{"time":"2320","id":"dev","n":"6960","note":"row2320"} +{"time":"2321","id":"dev","n":"6963","note":"row2321"} +{"time":"2322","id":"dev","n":"6966","note":"row2322"} +{"time":"2323","id":"dev","n":"6969","note":"row2323"} +{"time":"2324","id":"dev","n":"6972","note":"row2324"} +{"time":"2325","id":"dev","n":"6975","note":"row2325"} +{"time":"2326","id":"dev","n":"6978","note":"row2326"} +{"time":"2327","id":"dev","n":"6981","note":"row2327"} +{"time":"2328","id":"dev","n":"6984","note":"row2328"} +{"time":"2329","id":"dev","n":"6987","note":"row2329"} +{"time":"2330","id":"dev","n":"6990","note":"row2330"} +{"time":"2331","id":"dev","n":"6993","note":"row2331"} +{"time":"2332","id":"dev","n":"6996","note":"row2332"} +{"time":"2333","id":"dev","n":"6999","note":"row2333"} +{"time":"2334","id":"dev","n":"7002","note":"row2334"} +{"time":"2335","id":"dev","n":"7005","note":"row2335"} +{"time":"2336","id":"dev","n":"7008","note":"row2336"} +{"time":"2337","id":"dev","n":"7011","note":"row2337"} +{"time":"2338","id":"dev","n":"7014","note":"row2338"} +{"time":"2339","id":"dev","n":"7017","note":"row2339"} +{"time":"2340","id":"dev","n":"7020","note":"row2340"} +{"time":"2341","id":"dev","n":"7023","note":"row2341"} +{"time":"2342","id":"dev","n":"7026","note":"row2342"} +{"time":"2343","id":"dev","n":"7029","note":"row2343"} +{"time":"2344","id":"dev","n":"7032","note":"row2344"} +{"time":"2345","id":"dev","n":"7035","note":"row2345"} +{"time":"2346","id":"dev","n":"7038","note":"row2346"} +{"time":"2347","id":"dev","n":"7041","note":"row2347"} +{"time":"2348","id":"dev","n":"7044","note":"row2348"} +{"time":"2349","id":"dev","n":"7047","note":"row2349"} +{"time":"2350","id":"dev","n":"7050","note":"row2350"} +{"time":"2351","id":"dev","n":"7053","note":"row2351"} +{"time":"2352","id":"dev","n":"7056","note":"row2352"} +{"time":"2353","id":"dev","n":"7059","note":"row2353"} +{"time":"2354","id":"dev","n":"7062","note":"row2354"} +{"time":"2355","id":"dev","n":"7065","note":"row2355"} +{"time":"2356","id":"dev","n":"7068","note":"row2356"} +{"time":"2357","id":"dev","n":"7071","note":"row2357"} +{"time":"2358","id":"dev","n":"7074","note":"row2358"} +{"time":"2359","id":"dev","n":"7077","note":"row2359"} +{"time":"2360","id":"dev","n":"7080","note":"row2360"} +{"time":"2361","id":"dev","n":"7083","note":"row2361"} +{"time":"2362","id":"dev","n":"7086","note":"row2362"} +{"time":"2363","id":"dev","n":"7089","note":"row2363"} +{"time":"2364","id":"dev","n":"7092","note":"row2364"} +{"time":"2365","id":"dev","n":"7095","note":"row2365"} +{"time":"2366","id":"dev","n":"7098","note":"row2366"} +{"time":"2367","id":"dev","n":"7101","note":"row2367"} +{"time":"2368","id":"dev","n":"7104","note":"row2368"} +{"time":"2369","id":"dev","n":"7107","note":"row2369"} +{"time":"2370","id":"dev","n":"7110","note":"row2370"} +{"time":"2371","id":"dev","n":"7113","note":"row2371"} +{"time":"2372","id":"dev","n":"7116","note":"row2372"} +{"time":"2373","id":"dev","n":"7119","note":"row2373"} +{"time":"2374","id":"dev","n":"7122","note":"row2374"} +{"time":"2375","id":"dev","n":"7125","note":"row2375"} +{"time":"2376","id":"dev","n":"7128","note":"row2376"} +{"time":"2377","id":"dev","n":"7131","note":"row2377"} +{"time":"2378","id":"dev","n":"7134","note":"row2378"} +{"time":"2379","id":"dev","n":"7137","note":"row2379"} +{"time":"2380","id":"dev","n":"7140","note":"row2380"} +{"time":"2381","id":"dev","n":"7143","note":"row2381"} +{"time":"2382","id":"dev","n":"7146","note":"row2382"} +{"time":"2383","id":"dev","n":"7149","note":"row2383"} +{"time":"2384","id":"dev","n":"7152","note":"row2384"} +{"time":"2385","id":"dev","n":"7155","note":"row2385"} +{"time":"2386","id":"dev","n":"7158","note":"row2386"} +{"time":"2387","id":"dev","n":"7161","note":"row2387"} +{"time":"2388","id":"dev","n":"7164","note":"row2388"} +{"time":"2389","id":"dev","n":"7167","note":"row2389"} +{"time":"2390","id":"dev","n":"7170","note":"row2390"} +{"time":"2391","id":"dev","n":"7173","note":"row2391"} +{"time":"2392","id":"dev","n":"7176","note":"row2392"} +{"time":"2393","id":"dev","n":"7179","note":"row2393"} +{"time":"2394","id":"dev","n":"7182","note":"row2394"} +{"time":"2395","id":"dev","n":"7185","note":"row2395"} +{"time":"2396","id":"dev","n":"7188","note":"row2396"} +{"time":"2397","id":"dev","n":"7191","note":"row2397"} +{"time":"2398","id":"dev","n":"7194","note":"row2398"} +{"time":"2399","id":"dev","n":"7197","note":"row2399"} +{"time":"2400","id":"dev","n":"7200","note":"row2400"} +{"time":"2401","id":"dev","n":"7203","note":"row2401"} +{"time":"2402","id":"dev","n":"7206","note":"row2402"} +{"time":"2403","id":"dev","n":"7209","note":"row2403"} +{"time":"2404","id":"dev","n":"7212","note":"row2404"} +{"time":"2405","id":"dev","n":"7215","note":"row2405"} +{"time":"2406","id":"dev","n":"7218","note":"row2406"} +{"time":"2407","id":"dev","n":"7221","note":"row2407"} +{"time":"2408","id":"dev","n":"7224","note":"row2408"} +{"time":"2409","id":"dev","n":"7227","note":"row2409"} +{"time":"2410","id":"dev","n":"7230","note":"row2410"} +{"time":"2411","id":"dev","n":"7233","note":"row2411"} +{"time":"2412","id":"dev","n":"7236","note":"row2412"} +{"time":"2413","id":"dev","n":"7239","note":"row2413"} +{"time":"2414","id":"dev","n":"7242","note":"row2414"} +{"time":"2415","id":"dev","n":"7245","note":"row2415"} +{"time":"2416","id":"dev","n":"7248","note":"row2416"} +{"time":"2417","id":"dev","n":"7251","note":"row2417"} +{"time":"2418","id":"dev","n":"7254","note":"row2418"} +{"time":"2419","id":"dev","n":"7257","note":"row2419"} +{"time":"2420","id":"dev","n":"7260","note":"row2420"} +{"time":"2421","id":"dev","n":"7263","note":"row2421"} +{"time":"2422","id":"dev","n":"7266","note":"row2422"} +{"time":"2423","id":"dev","n":"7269","note":"row2423"} +{"time":"2424","id":"dev","n":"7272","note":"row2424"} +{"time":"2425","id":"dev","n":"7275","note":"row2425"} +{"time":"2426","id":"dev","n":"7278","note":"row2426"} +{"time":"2427","id":"dev","n":"7281","note":"row2427"} +{"time":"2428","id":"dev","n":"7284","note":"row2428"} +{"time":"2429","id":"dev","n":"7287","note":"row2429"} +{"time":"2430","id":"dev","n":"7290","note":"row2430"} +{"time":"2431","id":"dev","n":"7293","note":"row2431"} +{"time":"2432","id":"dev","n":"7296","note":"row2432"} +{"time":"2433","id":"dev","n":"7299","note":"row2433"} +{"time":"2434","id":"dev","n":"7302","note":"row2434"} +{"time":"2435","id":"dev","n":"7305","note":"row2435"} +{"time":"2436","id":"dev","n":"7308","note":"row2436"} +{"time":"2437","id":"dev","n":"7311","note":"row2437"} +{"time":"2438","id":"dev","n":"7314","note":"row2438"} +{"time":"2439","id":"dev","n":"7317","note":"row2439"} +{"time":"2440","id":"dev","n":"7320","note":"row2440"} +{"time":"2441","id":"dev","n":"7323","note":"row2441"} +{"time":"2442","id":"dev","n":"7326","note":"row2442"} +{"time":"2443","id":"dev","n":"7329","note":"row2443"} +{"time":"2444","id":"dev","n":"7332","note":"row2444"} +{"time":"2445","id":"dev","n":"7335","note":"row2445"} +{"time":"2446","id":"dev","n":"7338","note":"row2446"} +{"time":"2447","id":"dev","n":"7341","note":"row2447"} +{"time":"2448","id":"dev","n":"7344","note":"row2448"} +{"time":"2449","id":"dev","n":"7347","note":"row2449"} +{"time":"2450","id":"dev","n":"7350","note":"row2450"} +{"time":"2451","id":"dev","n":"7353","note":"row2451"} +{"time":"2452","id":"dev","n":"7356","note":"row2452"} +{"time":"2453","id":"dev","n":"7359","note":"row2453"} +{"time":"2454","id":"dev","n":"7362","note":"row2454"} +{"time":"2455","id":"dev","n":"7365","note":"row2455"} +{"time":"2456","id":"dev","n":"7368","note":"row2456"} +{"time":"2457","id":"dev","n":"7371","note":"row2457"} +{"time":"2458","id":"dev","n":"7374","note":"row2458"} +{"time":"2459","id":"dev","n":"7377","note":"row2459"} +{"time":"2460","id":"dev","n":"7380","note":"row2460"} +{"time":"2461","id":"dev","n":"7383","note":"row2461"} +{"time":"2462","id":"dev","n":"7386","note":"row2462"} +{"time":"2463","id":"dev","n":"7389","note":"row2463"} +{"time":"2464","id":"dev","n":"7392","note":"row2464"} +{"time":"2465","id":"dev","n":"7395","note":"row2465"} +{"time":"2466","id":"dev","n":"7398","note":"row2466"} +{"time":"2467","id":"dev","n":"7401","note":"row2467"} +{"time":"2468","id":"dev","n":"7404","note":"row2468"} +{"time":"2469","id":"dev","n":"7407","note":"row2469"} +{"time":"2470","id":"dev","n":"7410","note":"row2470"} +{"time":"2471","id":"dev","n":"7413","note":"row2471"} +{"time":"2472","id":"dev","n":"7416","note":"row2472"} +{"time":"2473","id":"dev","n":"7419","note":"row2473"} +{"time":"2474","id":"dev","n":"7422","note":"row2474"} +{"time":"2475","id":"dev","n":"7425","note":"row2475"} +{"time":"2476","id":"dev","n":"7428","note":"row2476"} +{"time":"2477","id":"dev","n":"7431","note":"row2477"} +{"time":"2478","id":"dev","n":"7434","note":"row2478"} +{"time":"2479","id":"dev","n":"7437","note":"row2479"} +{"time":"2480","id":"dev","n":"7440","note":"row2480"} +{"time":"2481","id":"dev","n":"7443","note":"row2481"} +{"time":"2482","id":"dev","n":"7446","note":"row2482"} +{"time":"2483","id":"dev","n":"7449","note":"row2483"} +{"time":"2484","id":"dev","n":"7452","note":"row2484"} +{"time":"2485","id":"dev","n":"7455","note":"row2485"} +{"time":"2486","id":"dev","n":"7458","note":"row2486"} +{"time":"2487","id":"dev","n":"7461","note":"row2487"} +{"time":"2488","id":"dev","n":"7464","note":"row2488"} +{"time":"2489","id":"dev","n":"7467","note":"row2489"} +{"time":"2490","id":"dev","n":"7470","note":"row2490"} +{"time":"2491","id":"dev","n":"7473","note":"row2491"} +{"time":"2492","id":"dev","n":"7476","note":"row2492"} +{"time":"2493","id":"dev","n":"7479","note":"row2493"} +{"time":"2494","id":"dev","n":"7482","note":"row2494"} +{"time":"2495","id":"dev","n":"7485","note":"row2495"} +{"time":"2496","id":"dev","n":"7488","note":"row2496"} +{"time":"2497","id":"dev","n":"7491","note":"row2497"} +{"time":"2498","id":"dev","n":"7494","note":"row2498"} +{"time":"2499","id":"dev","n":"7497","note":"row2499"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/003.stdout.txt new file mode 100644 index 000000000..277bb98d8 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/003.stdout.txt @@ -0,0 +1,4 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,t,id,TAG,2500,1,2500,0,0,2499,scan +table,t,n,FIELD,2500,1,2500,0,0,2499,scan +table,t,note,FIELD,2500,1,2500,0,0,2499,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/004.stdout.txt new file mode 100644 index 000000000..a8f115c72 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/004.stdout.txt @@ -0,0 +1 @@ +{"time":"2400","id":"dev","n":"7200","note":"row2400"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/002.roundtrip.txt new file mode 100644 index 000000000..a627f40e0 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/002.roundtrip.txt @@ -0,0 +1 @@ +{"time":"0","id":"a","s1":"1"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/003.stdout.txt new file mode 100644 index 000000000..98452b9e0 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/003.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,data_type,encoding,compression +table,mixed,id,TAG,STRING,PLAIN,LZ4 +table,mixed,s1,FIELD,INT64,TS_2DIFF,LZ4 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsBadDate/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsBadDate/001.stderr.txt new file mode 100644 index 000000000..2f41a48db --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsBadDate/001.stderr.txt @@ -0,0 +1 @@ +Error: bad DATE 'not-a-date' (want YYYY-MM-DD) (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDoubleOverflow/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDoubleOverflow/001.stderr.txt new file mode 100644 index 000000000..802ab6b1b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDoubleOverflow/001.stderr.txt @@ -0,0 +1 @@ +Error: DOUBLE out of range '1e400' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDuplicateColumnNames/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDuplicateColumnNames/001.stderr.txt new file mode 100644 index 000000000..65644b5c9 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDuplicateColumnNames/001.stderr.txt @@ -0,0 +1 @@ +Error: duplicate column name 's1' diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsHeaderMatchWithNoHeader/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsHeaderMatchWithNoHeader/001.stderr.txt new file mode 100644 index 000000000..e01eae7e3 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsHeaderMatchWithNoHeader/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --no-header/--header-match are not valid for write +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsImpossibleDate/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsImpossibleDate/001.stderr.txt new file mode 100644 index 000000000..887e6fa26 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsImpossibleDate/001.stderr.txt @@ -0,0 +1 @@ +Error: bad DATE '2024-13-40' (want YYYY-MM-DD) (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt32Overflow/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt32Overflow/001.stderr.txt new file mode 100644 index 000000000..79167d100 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt32Overflow/001.stderr.txt @@ -0,0 +1 @@ +Error: INT32 out of range '3000000000' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt64Overflow/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt64Overflow/001.stderr.txt new file mode 100644 index 000000000..5dde88e9c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt64Overflow/001.stderr.txt @@ -0,0 +1 @@ +Error: INT64 out of range '99999999999999999999999999' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput/001.stderr.txt new file mode 100644 index 000000000..f7a504766 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput/001.stderr.txt @@ -0,0 +1 @@ +Error: invalid UTF-8 or misplaced BOM (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericInt64/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericInt64/001.stderr.txt new file mode 100644 index 000000000..0763e6950 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericInt64/001.stderr.txt @@ -0,0 +1 @@ +Error: bad INT64 '12abc' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericTimestampColumn/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericTimestampColumn/001.stderr.txt new file mode 100644 index 000000000..c2b6b0908 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericTimestampColumn/001.stderr.txt @@ -0,0 +1 @@ +Error: bad TIMESTAMP 'not-a-number' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonStringTag/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonStringTag/001.stderr.txt new file mode 100644 index 000000000..86b5baf23 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonStringTag/001.stderr.txt @@ -0,0 +1 @@ +Error: TAG column 'id' must use STRING diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderAcrossBatches/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderAcrossBatches/001.stderr.txt new file mode 100644 index 000000000..cd0b2a52e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderAcrossBatches/001.stderr.txt @@ -0,0 +1 @@ +Error: timestamps must be strictly increasing per device (line 1102: 500 <= previous 1100) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderTimestampsAndLeavesNoOutput/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderTimestampsAndLeavesNoOutput/001.stderr.txt new file mode 100644 index 000000000..e0beb93dc --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderTimestampsAndLeavesNoOutput/001.stderr.txt @@ -0,0 +1 @@ +Error: timestamps must be strictly increasing per device (line 3: 1 <= previous 5) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutputEqualsInput/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutputEqualsInput/001.stderr.txt new file mode 100644 index 000000000..368be9aae --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutputEqualsInput/001.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_alias_264.csv' is the same as the input file 'tsfile_cli_alias_264.csv' diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/001.stderr.txt new file mode 100644 index 000000000..1bc093b7b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/001.stderr.txt @@ -0,0 +1 @@ +Error: name 'time' is reserved diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/002.stderr.txt new file mode 100644 index 000000000..0c2e0e2d1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/002.stderr.txt @@ -0,0 +1,2 @@ +Error: invalid table name 'bad +name': name contains a control character diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTagOnlySchema/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTagOnlySchema/001.stderr.txt new file mode 100644 index 000000000..f87621c5d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTagOnlySchema/001.stderr.txt @@ -0,0 +1 @@ +Error: write requires at least one --field column diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTimestampOverflow/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTimestampOverflow/001.stderr.txt new file mode 100644 index 000000000..4c68c1ee9 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTimestampOverflow/001.stderr.txt @@ -0,0 +1 @@ +Error: TIMESTAMP out of range '99999999999999999999999999' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsQuotedSpecialChars/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsQuotedSpecialChars/002.roundtrip.txt new file mode 100644 index 000000000..f26891817 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsQuotedSpecialChars/002.roundtrip.txt @@ -0,0 +1 @@ +{"time":"0","id":"dev","note":"a,b \"q\" c"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/002.roundtrip.txt new file mode 100644 index 000000000..643cd211c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"0","id1":"dev","ts1":"1700000000000","d1":"2024-01-15","b1":"0x68656c6c6f"} +{"time":"1","id1":"dev","ts1":"1700000000001","d1":"2024-12-31","b1":"0x776f726c64"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/003.stdout.txt new file mode 100644 index 000000000..d7a0efdb1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/003.stdout.txt @@ -0,0 +1,3 @@ +time,id1,ts1,d1,b1 +0,dev,1700000000000,2024-01-15,0x68656c6c6f +1,dev,1700000000001,2024-12-31,0x776f726c64 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/002.roundtrip.txt new file mode 100644 index 000000000..26d03d635 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/002.roundtrip.txt @@ -0,0 +1,3000 @@ +{"time":"1","s1":"2"} +{"time":"2","s1":"4"} +{"time":"3","s1":"6"} +{"time":"4","s1":"8"} +{"time":"5","s1":"10"} +{"time":"6","s1":"12"} +{"time":"7","s1":"14"} +{"time":"8","s1":"16"} +{"time":"9","s1":"18"} +{"time":"10","s1":"20"} +{"time":"11","s1":"22"} +{"time":"12","s1":"24"} +{"time":"13","s1":"26"} +{"time":"14","s1":"28"} +{"time":"15","s1":"30"} +{"time":"16","s1":"32"} +{"time":"17","s1":"34"} +{"time":"18","s1":"36"} +{"time":"19","s1":"38"} +{"time":"20","s1":"40"} +{"time":"21","s1":"42"} +{"time":"22","s1":"44"} +{"time":"23","s1":"46"} +{"time":"24","s1":"48"} +{"time":"25","s1":"50"} +{"time":"26","s1":"52"} +{"time":"27","s1":"54"} +{"time":"28","s1":"56"} +{"time":"29","s1":"58"} +{"time":"30","s1":"60"} +{"time":"31","s1":"62"} +{"time":"32","s1":"64"} +{"time":"33","s1":"66"} +{"time":"34","s1":"68"} +{"time":"35","s1":"70"} +{"time":"36","s1":"72"} +{"time":"37","s1":"74"} +{"time":"38","s1":"76"} +{"time":"39","s1":"78"} +{"time":"40","s1":"80"} +{"time":"41","s1":"82"} +{"time":"42","s1":"84"} +{"time":"43","s1":"86"} +{"time":"44","s1":"88"} +{"time":"45","s1":"90"} +{"time":"46","s1":"92"} +{"time":"47","s1":"94"} +{"time":"48","s1":"96"} +{"time":"49","s1":"98"} +{"time":"50","s1":"100"} +{"time":"51","s1":"102"} +{"time":"52","s1":"104"} +{"time":"53","s1":"106"} +{"time":"54","s1":"108"} +{"time":"55","s1":"110"} +{"time":"56","s1":"112"} +{"time":"57","s1":"114"} +{"time":"58","s1":"116"} +{"time":"59","s1":"118"} +{"time":"60","s1":"120"} +{"time":"61","s1":"122"} +{"time":"62","s1":"124"} +{"time":"63","s1":"126"} +{"time":"64","s1":"128"} +{"time":"65","s1":"130"} +{"time":"66","s1":"132"} +{"time":"67","s1":"134"} +{"time":"68","s1":"136"} +{"time":"69","s1":"138"} +{"time":"70","s1":"140"} +{"time":"71","s1":"142"} +{"time":"72","s1":"144"} +{"time":"73","s1":"146"} +{"time":"74","s1":"148"} +{"time":"75","s1":"150"} +{"time":"76","s1":"152"} +{"time":"77","s1":"154"} +{"time":"78","s1":"156"} +{"time":"79","s1":"158"} +{"time":"80","s1":"160"} +{"time":"81","s1":"162"} +{"time":"82","s1":"164"} +{"time":"83","s1":"166"} +{"time":"84","s1":"168"} +{"time":"85","s1":"170"} +{"time":"86","s1":"172"} +{"time":"87","s1":"174"} +{"time":"88","s1":"176"} +{"time":"89","s1":"178"} +{"time":"90","s1":"180"} +{"time":"91","s1":"182"} +{"time":"92","s1":"184"} +{"time":"93","s1":"186"} +{"time":"94","s1":"188"} +{"time":"95","s1":"190"} +{"time":"96","s1":"192"} +{"time":"97","s1":"194"} +{"time":"98","s1":"196"} +{"time":"99","s1":"198"} +{"time":"100","s1":"200"} +{"time":"101","s1":"202"} +{"time":"102","s1":"204"} +{"time":"103","s1":"206"} +{"time":"104","s1":"208"} +{"time":"105","s1":"210"} +{"time":"106","s1":"212"} +{"time":"107","s1":"214"} +{"time":"108","s1":"216"} +{"time":"109","s1":"218"} +{"time":"110","s1":"220"} +{"time":"111","s1":"222"} +{"time":"112","s1":"224"} +{"time":"113","s1":"226"} +{"time":"114","s1":"228"} +{"time":"115","s1":"230"} +{"time":"116","s1":"232"} +{"time":"117","s1":"234"} +{"time":"118","s1":"236"} +{"time":"119","s1":"238"} +{"time":"120","s1":"240"} +{"time":"121","s1":"242"} +{"time":"122","s1":"244"} +{"time":"123","s1":"246"} +{"time":"124","s1":"248"} +{"time":"125","s1":"250"} +{"time":"126","s1":"252"} +{"time":"127","s1":"254"} +{"time":"128","s1":"256"} +{"time":"129","s1":"258"} +{"time":"130","s1":"260"} +{"time":"131","s1":"262"} +{"time":"132","s1":"264"} +{"time":"133","s1":"266"} +{"time":"134","s1":"268"} +{"time":"135","s1":"270"} +{"time":"136","s1":"272"} +{"time":"137","s1":"274"} +{"time":"138","s1":"276"} +{"time":"139","s1":"278"} +{"time":"140","s1":"280"} +{"time":"141","s1":"282"} +{"time":"142","s1":"284"} +{"time":"143","s1":"286"} +{"time":"144","s1":"288"} +{"time":"145","s1":"290"} +{"time":"146","s1":"292"} +{"time":"147","s1":"294"} +{"time":"148","s1":"296"} +{"time":"149","s1":"298"} +{"time":"150","s1":"300"} +{"time":"151","s1":"302"} +{"time":"152","s1":"304"} +{"time":"153","s1":"306"} +{"time":"154","s1":"308"} +{"time":"155","s1":"310"} +{"time":"156","s1":"312"} +{"time":"157","s1":"314"} +{"time":"158","s1":"316"} +{"time":"159","s1":"318"} +{"time":"160","s1":"320"} +{"time":"161","s1":"322"} +{"time":"162","s1":"324"} +{"time":"163","s1":"326"} +{"time":"164","s1":"328"} +{"time":"165","s1":"330"} +{"time":"166","s1":"332"} +{"time":"167","s1":"334"} +{"time":"168","s1":"336"} +{"time":"169","s1":"338"} +{"time":"170","s1":"340"} +{"time":"171","s1":"342"} +{"time":"172","s1":"344"} +{"time":"173","s1":"346"} +{"time":"174","s1":"348"} +{"time":"175","s1":"350"} +{"time":"176","s1":"352"} +{"time":"177","s1":"354"} +{"time":"178","s1":"356"} +{"time":"179","s1":"358"} +{"time":"180","s1":"360"} +{"time":"181","s1":"362"} +{"time":"182","s1":"364"} +{"time":"183","s1":"366"} +{"time":"184","s1":"368"} +{"time":"185","s1":"370"} +{"time":"186","s1":"372"} +{"time":"187","s1":"374"} +{"time":"188","s1":"376"} +{"time":"189","s1":"378"} +{"time":"190","s1":"380"} +{"time":"191","s1":"382"} +{"time":"192","s1":"384"} +{"time":"193","s1":"386"} +{"time":"194","s1":"388"} +{"time":"195","s1":"390"} +{"time":"196","s1":"392"} +{"time":"197","s1":"394"} +{"time":"198","s1":"396"} +{"time":"199","s1":"398"} +{"time":"200","s1":"400"} +{"time":"201","s1":"402"} +{"time":"202","s1":"404"} +{"time":"203","s1":"406"} +{"time":"204","s1":"408"} +{"time":"205","s1":"410"} +{"time":"206","s1":"412"} +{"time":"207","s1":"414"} +{"time":"208","s1":"416"} +{"time":"209","s1":"418"} +{"time":"210","s1":"420"} +{"time":"211","s1":"422"} +{"time":"212","s1":"424"} +{"time":"213","s1":"426"} +{"time":"214","s1":"428"} +{"time":"215","s1":"430"} +{"time":"216","s1":"432"} +{"time":"217","s1":"434"} +{"time":"218","s1":"436"} +{"time":"219","s1":"438"} +{"time":"220","s1":"440"} +{"time":"221","s1":"442"} +{"time":"222","s1":"444"} +{"time":"223","s1":"446"} +{"time":"224","s1":"448"} +{"time":"225","s1":"450"} +{"time":"226","s1":"452"} +{"time":"227","s1":"454"} +{"time":"228","s1":"456"} +{"time":"229","s1":"458"} +{"time":"230","s1":"460"} +{"time":"231","s1":"462"} +{"time":"232","s1":"464"} +{"time":"233","s1":"466"} +{"time":"234","s1":"468"} +{"time":"235","s1":"470"} +{"time":"236","s1":"472"} +{"time":"237","s1":"474"} +{"time":"238","s1":"476"} +{"time":"239","s1":"478"} +{"time":"240","s1":"480"} +{"time":"241","s1":"482"} +{"time":"242","s1":"484"} +{"time":"243","s1":"486"} +{"time":"244","s1":"488"} +{"time":"245","s1":"490"} +{"time":"246","s1":"492"} +{"time":"247","s1":"494"} +{"time":"248","s1":"496"} +{"time":"249","s1":"498"} +{"time":"250","s1":"500"} +{"time":"251","s1":"502"} +{"time":"252","s1":"504"} +{"time":"253","s1":"506"} +{"time":"254","s1":"508"} +{"time":"255","s1":"510"} +{"time":"256","s1":"512"} +{"time":"257","s1":"514"} +{"time":"258","s1":"516"} +{"time":"259","s1":"518"} +{"time":"260","s1":"520"} +{"time":"261","s1":"522"} +{"time":"262","s1":"524"} +{"time":"263","s1":"526"} +{"time":"264","s1":"528"} +{"time":"265","s1":"530"} +{"time":"266","s1":"532"} +{"time":"267","s1":"534"} +{"time":"268","s1":"536"} +{"time":"269","s1":"538"} +{"time":"270","s1":"540"} +{"time":"271","s1":"542"} +{"time":"272","s1":"544"} +{"time":"273","s1":"546"} +{"time":"274","s1":"548"} +{"time":"275","s1":"550"} +{"time":"276","s1":"552"} +{"time":"277","s1":"554"} +{"time":"278","s1":"556"} +{"time":"279","s1":"558"} +{"time":"280","s1":"560"} +{"time":"281","s1":"562"} +{"time":"282","s1":"564"} +{"time":"283","s1":"566"} +{"time":"284","s1":"568"} +{"time":"285","s1":"570"} +{"time":"286","s1":"572"} +{"time":"287","s1":"574"} +{"time":"288","s1":"576"} +{"time":"289","s1":"578"} +{"time":"290","s1":"580"} +{"time":"291","s1":"582"} +{"time":"292","s1":"584"} +{"time":"293","s1":"586"} +{"time":"294","s1":"588"} +{"time":"295","s1":"590"} +{"time":"296","s1":"592"} +{"time":"297","s1":"594"} +{"time":"298","s1":"596"} +{"time":"299","s1":"598"} +{"time":"300","s1":"600"} +{"time":"301","s1":"602"} +{"time":"302","s1":"604"} +{"time":"303","s1":"606"} +{"time":"304","s1":"608"} +{"time":"305","s1":"610"} +{"time":"306","s1":"612"} +{"time":"307","s1":"614"} +{"time":"308","s1":"616"} +{"time":"309","s1":"618"} +{"time":"310","s1":"620"} +{"time":"311","s1":"622"} +{"time":"312","s1":"624"} +{"time":"313","s1":"626"} +{"time":"314","s1":"628"} +{"time":"315","s1":"630"} +{"time":"316","s1":"632"} +{"time":"317","s1":"634"} +{"time":"318","s1":"636"} +{"time":"319","s1":"638"} +{"time":"320","s1":"640"} +{"time":"321","s1":"642"} +{"time":"322","s1":"644"} +{"time":"323","s1":"646"} +{"time":"324","s1":"648"} +{"time":"325","s1":"650"} +{"time":"326","s1":"652"} +{"time":"327","s1":"654"} +{"time":"328","s1":"656"} +{"time":"329","s1":"658"} +{"time":"330","s1":"660"} +{"time":"331","s1":"662"} +{"time":"332","s1":"664"} +{"time":"333","s1":"666"} +{"time":"334","s1":"668"} +{"time":"335","s1":"670"} +{"time":"336","s1":"672"} +{"time":"337","s1":"674"} +{"time":"338","s1":"676"} +{"time":"339","s1":"678"} +{"time":"340","s1":"680"} +{"time":"341","s1":"682"} +{"time":"342","s1":"684"} +{"time":"343","s1":"686"} +{"time":"344","s1":"688"} +{"time":"345","s1":"690"} +{"time":"346","s1":"692"} +{"time":"347","s1":"694"} +{"time":"348","s1":"696"} +{"time":"349","s1":"698"} +{"time":"350","s1":"700"} +{"time":"351","s1":"702"} +{"time":"352","s1":"704"} +{"time":"353","s1":"706"} +{"time":"354","s1":"708"} +{"time":"355","s1":"710"} +{"time":"356","s1":"712"} +{"time":"357","s1":"714"} +{"time":"358","s1":"716"} +{"time":"359","s1":"718"} +{"time":"360","s1":"720"} +{"time":"361","s1":"722"} +{"time":"362","s1":"724"} +{"time":"363","s1":"726"} +{"time":"364","s1":"728"} +{"time":"365","s1":"730"} +{"time":"366","s1":"732"} +{"time":"367","s1":"734"} +{"time":"368","s1":"736"} +{"time":"369","s1":"738"} +{"time":"370","s1":"740"} +{"time":"371","s1":"742"} +{"time":"372","s1":"744"} +{"time":"373","s1":"746"} +{"time":"374","s1":"748"} +{"time":"375","s1":"750"} +{"time":"376","s1":"752"} +{"time":"377","s1":"754"} +{"time":"378","s1":"756"} +{"time":"379","s1":"758"} +{"time":"380","s1":"760"} +{"time":"381","s1":"762"} +{"time":"382","s1":"764"} +{"time":"383","s1":"766"} +{"time":"384","s1":"768"} +{"time":"385","s1":"770"} +{"time":"386","s1":"772"} +{"time":"387","s1":"774"} +{"time":"388","s1":"776"} +{"time":"389","s1":"778"} +{"time":"390","s1":"780"} +{"time":"391","s1":"782"} +{"time":"392","s1":"784"} +{"time":"393","s1":"786"} +{"time":"394","s1":"788"} +{"time":"395","s1":"790"} +{"time":"396","s1":"792"} +{"time":"397","s1":"794"} +{"time":"398","s1":"796"} +{"time":"399","s1":"798"} +{"time":"400","s1":"800"} +{"time":"401","s1":"802"} +{"time":"402","s1":"804"} +{"time":"403","s1":"806"} +{"time":"404","s1":"808"} +{"time":"405","s1":"810"} +{"time":"406","s1":"812"} +{"time":"407","s1":"814"} +{"time":"408","s1":"816"} +{"time":"409","s1":"818"} +{"time":"410","s1":"820"} +{"time":"411","s1":"822"} +{"time":"412","s1":"824"} +{"time":"413","s1":"826"} +{"time":"414","s1":"828"} +{"time":"415","s1":"830"} +{"time":"416","s1":"832"} +{"time":"417","s1":"834"} +{"time":"418","s1":"836"} +{"time":"419","s1":"838"} +{"time":"420","s1":"840"} +{"time":"421","s1":"842"} +{"time":"422","s1":"844"} +{"time":"423","s1":"846"} +{"time":"424","s1":"848"} +{"time":"425","s1":"850"} +{"time":"426","s1":"852"} +{"time":"427","s1":"854"} +{"time":"428","s1":"856"} +{"time":"429","s1":"858"} +{"time":"430","s1":"860"} +{"time":"431","s1":"862"} +{"time":"432","s1":"864"} +{"time":"433","s1":"866"} +{"time":"434","s1":"868"} +{"time":"435","s1":"870"} +{"time":"436","s1":"872"} +{"time":"437","s1":"874"} +{"time":"438","s1":"876"} +{"time":"439","s1":"878"} +{"time":"440","s1":"880"} +{"time":"441","s1":"882"} +{"time":"442","s1":"884"} +{"time":"443","s1":"886"} +{"time":"444","s1":"888"} +{"time":"445","s1":"890"} +{"time":"446","s1":"892"} +{"time":"447","s1":"894"} +{"time":"448","s1":"896"} +{"time":"449","s1":"898"} +{"time":"450","s1":"900"} +{"time":"451","s1":"902"} +{"time":"452","s1":"904"} +{"time":"453","s1":"906"} +{"time":"454","s1":"908"} +{"time":"455","s1":"910"} +{"time":"456","s1":"912"} +{"time":"457","s1":"914"} +{"time":"458","s1":"916"} +{"time":"459","s1":"918"} +{"time":"460","s1":"920"} +{"time":"461","s1":"922"} +{"time":"462","s1":"924"} +{"time":"463","s1":"926"} +{"time":"464","s1":"928"} +{"time":"465","s1":"930"} +{"time":"466","s1":"932"} +{"time":"467","s1":"934"} +{"time":"468","s1":"936"} +{"time":"469","s1":"938"} +{"time":"470","s1":"940"} +{"time":"471","s1":"942"} +{"time":"472","s1":"944"} +{"time":"473","s1":"946"} +{"time":"474","s1":"948"} +{"time":"475","s1":"950"} +{"time":"476","s1":"952"} +{"time":"477","s1":"954"} +{"time":"478","s1":"956"} +{"time":"479","s1":"958"} +{"time":"480","s1":"960"} +{"time":"481","s1":"962"} +{"time":"482","s1":"964"} +{"time":"483","s1":"966"} +{"time":"484","s1":"968"} +{"time":"485","s1":"970"} +{"time":"486","s1":"972"} +{"time":"487","s1":"974"} +{"time":"488","s1":"976"} +{"time":"489","s1":"978"} +{"time":"490","s1":"980"} +{"time":"491","s1":"982"} +{"time":"492","s1":"984"} +{"time":"493","s1":"986"} +{"time":"494","s1":"988"} +{"time":"495","s1":"990"} +{"time":"496","s1":"992"} +{"time":"497","s1":"994"} +{"time":"498","s1":"996"} +{"time":"499","s1":"998"} +{"time":"500","s1":"1000"} +{"time":"501","s1":"1002"} +{"time":"502","s1":"1004"} +{"time":"503","s1":"1006"} +{"time":"504","s1":"1008"} +{"time":"505","s1":"1010"} +{"time":"506","s1":"1012"} +{"time":"507","s1":"1014"} +{"time":"508","s1":"1016"} +{"time":"509","s1":"1018"} +{"time":"510","s1":"1020"} +{"time":"511","s1":"1022"} +{"time":"512","s1":"1024"} +{"time":"513","s1":"1026"} +{"time":"514","s1":"1028"} +{"time":"515","s1":"1030"} +{"time":"516","s1":"1032"} +{"time":"517","s1":"1034"} +{"time":"518","s1":"1036"} +{"time":"519","s1":"1038"} +{"time":"520","s1":"1040"} +{"time":"521","s1":"1042"} +{"time":"522","s1":"1044"} +{"time":"523","s1":"1046"} +{"time":"524","s1":"1048"} +{"time":"525","s1":"1050"} +{"time":"526","s1":"1052"} +{"time":"527","s1":"1054"} +{"time":"528","s1":"1056"} +{"time":"529","s1":"1058"} +{"time":"530","s1":"1060"} +{"time":"531","s1":"1062"} +{"time":"532","s1":"1064"} +{"time":"533","s1":"1066"} +{"time":"534","s1":"1068"} +{"time":"535","s1":"1070"} +{"time":"536","s1":"1072"} +{"time":"537","s1":"1074"} +{"time":"538","s1":"1076"} +{"time":"539","s1":"1078"} +{"time":"540","s1":"1080"} +{"time":"541","s1":"1082"} +{"time":"542","s1":"1084"} +{"time":"543","s1":"1086"} +{"time":"544","s1":"1088"} +{"time":"545","s1":"1090"} +{"time":"546","s1":"1092"} +{"time":"547","s1":"1094"} +{"time":"548","s1":"1096"} +{"time":"549","s1":"1098"} +{"time":"550","s1":"1100"} +{"time":"551","s1":"1102"} +{"time":"552","s1":"1104"} +{"time":"553","s1":"1106"} +{"time":"554","s1":"1108"} +{"time":"555","s1":"1110"} +{"time":"556","s1":"1112"} +{"time":"557","s1":"1114"} +{"time":"558","s1":"1116"} +{"time":"559","s1":"1118"} +{"time":"560","s1":"1120"} +{"time":"561","s1":"1122"} +{"time":"562","s1":"1124"} +{"time":"563","s1":"1126"} +{"time":"564","s1":"1128"} +{"time":"565","s1":"1130"} +{"time":"566","s1":"1132"} +{"time":"567","s1":"1134"} +{"time":"568","s1":"1136"} +{"time":"569","s1":"1138"} +{"time":"570","s1":"1140"} +{"time":"571","s1":"1142"} +{"time":"572","s1":"1144"} +{"time":"573","s1":"1146"} +{"time":"574","s1":"1148"} +{"time":"575","s1":"1150"} +{"time":"576","s1":"1152"} +{"time":"577","s1":"1154"} +{"time":"578","s1":"1156"} +{"time":"579","s1":"1158"} +{"time":"580","s1":"1160"} +{"time":"581","s1":"1162"} +{"time":"582","s1":"1164"} +{"time":"583","s1":"1166"} +{"time":"584","s1":"1168"} +{"time":"585","s1":"1170"} +{"time":"586","s1":"1172"} +{"time":"587","s1":"1174"} +{"time":"588","s1":"1176"} +{"time":"589","s1":"1178"} +{"time":"590","s1":"1180"} +{"time":"591","s1":"1182"} +{"time":"592","s1":"1184"} +{"time":"593","s1":"1186"} +{"time":"594","s1":"1188"} +{"time":"595","s1":"1190"} +{"time":"596","s1":"1192"} +{"time":"597","s1":"1194"} +{"time":"598","s1":"1196"} +{"time":"599","s1":"1198"} +{"time":"600","s1":"1200"} +{"time":"601","s1":"1202"} +{"time":"602","s1":"1204"} +{"time":"603","s1":"1206"} +{"time":"604","s1":"1208"} +{"time":"605","s1":"1210"} +{"time":"606","s1":"1212"} +{"time":"607","s1":"1214"} +{"time":"608","s1":"1216"} +{"time":"609","s1":"1218"} +{"time":"610","s1":"1220"} +{"time":"611","s1":"1222"} +{"time":"612","s1":"1224"} +{"time":"613","s1":"1226"} +{"time":"614","s1":"1228"} +{"time":"615","s1":"1230"} +{"time":"616","s1":"1232"} +{"time":"617","s1":"1234"} +{"time":"618","s1":"1236"} +{"time":"619","s1":"1238"} +{"time":"620","s1":"1240"} +{"time":"621","s1":"1242"} +{"time":"622","s1":"1244"} +{"time":"623","s1":"1246"} +{"time":"624","s1":"1248"} +{"time":"625","s1":"1250"} +{"time":"626","s1":"1252"} +{"time":"627","s1":"1254"} +{"time":"628","s1":"1256"} +{"time":"629","s1":"1258"} +{"time":"630","s1":"1260"} +{"time":"631","s1":"1262"} +{"time":"632","s1":"1264"} +{"time":"633","s1":"1266"} +{"time":"634","s1":"1268"} +{"time":"635","s1":"1270"} +{"time":"636","s1":"1272"} +{"time":"637","s1":"1274"} +{"time":"638","s1":"1276"} +{"time":"639","s1":"1278"} +{"time":"640","s1":"1280"} +{"time":"641","s1":"1282"} +{"time":"642","s1":"1284"} +{"time":"643","s1":"1286"} +{"time":"644","s1":"1288"} +{"time":"645","s1":"1290"} +{"time":"646","s1":"1292"} +{"time":"647","s1":"1294"} +{"time":"648","s1":"1296"} +{"time":"649","s1":"1298"} +{"time":"650","s1":"1300"} +{"time":"651","s1":"1302"} +{"time":"652","s1":"1304"} +{"time":"653","s1":"1306"} +{"time":"654","s1":"1308"} +{"time":"655","s1":"1310"} +{"time":"656","s1":"1312"} +{"time":"657","s1":"1314"} +{"time":"658","s1":"1316"} +{"time":"659","s1":"1318"} +{"time":"660","s1":"1320"} +{"time":"661","s1":"1322"} +{"time":"662","s1":"1324"} +{"time":"663","s1":"1326"} +{"time":"664","s1":"1328"} +{"time":"665","s1":"1330"} +{"time":"666","s1":"1332"} +{"time":"667","s1":"1334"} +{"time":"668","s1":"1336"} +{"time":"669","s1":"1338"} +{"time":"670","s1":"1340"} +{"time":"671","s1":"1342"} +{"time":"672","s1":"1344"} +{"time":"673","s1":"1346"} +{"time":"674","s1":"1348"} +{"time":"675","s1":"1350"} +{"time":"676","s1":"1352"} +{"time":"677","s1":"1354"} +{"time":"678","s1":"1356"} +{"time":"679","s1":"1358"} +{"time":"680","s1":"1360"} +{"time":"681","s1":"1362"} +{"time":"682","s1":"1364"} +{"time":"683","s1":"1366"} +{"time":"684","s1":"1368"} +{"time":"685","s1":"1370"} +{"time":"686","s1":"1372"} +{"time":"687","s1":"1374"} +{"time":"688","s1":"1376"} +{"time":"689","s1":"1378"} +{"time":"690","s1":"1380"} +{"time":"691","s1":"1382"} +{"time":"692","s1":"1384"} +{"time":"693","s1":"1386"} +{"time":"694","s1":"1388"} +{"time":"695","s1":"1390"} +{"time":"696","s1":"1392"} +{"time":"697","s1":"1394"} +{"time":"698","s1":"1396"} +{"time":"699","s1":"1398"} +{"time":"700","s1":"1400"} +{"time":"701","s1":"1402"} +{"time":"702","s1":"1404"} +{"time":"703","s1":"1406"} +{"time":"704","s1":"1408"} +{"time":"705","s1":"1410"} +{"time":"706","s1":"1412"} +{"time":"707","s1":"1414"} +{"time":"708","s1":"1416"} +{"time":"709","s1":"1418"} +{"time":"710","s1":"1420"} +{"time":"711","s1":"1422"} +{"time":"712","s1":"1424"} +{"time":"713","s1":"1426"} +{"time":"714","s1":"1428"} +{"time":"715","s1":"1430"} +{"time":"716","s1":"1432"} +{"time":"717","s1":"1434"} +{"time":"718","s1":"1436"} +{"time":"719","s1":"1438"} +{"time":"720","s1":"1440"} +{"time":"721","s1":"1442"} +{"time":"722","s1":"1444"} +{"time":"723","s1":"1446"} +{"time":"724","s1":"1448"} +{"time":"725","s1":"1450"} +{"time":"726","s1":"1452"} +{"time":"727","s1":"1454"} +{"time":"728","s1":"1456"} +{"time":"729","s1":"1458"} +{"time":"730","s1":"1460"} +{"time":"731","s1":"1462"} +{"time":"732","s1":"1464"} +{"time":"733","s1":"1466"} +{"time":"734","s1":"1468"} +{"time":"735","s1":"1470"} +{"time":"736","s1":"1472"} +{"time":"737","s1":"1474"} +{"time":"738","s1":"1476"} +{"time":"739","s1":"1478"} +{"time":"740","s1":"1480"} +{"time":"741","s1":"1482"} +{"time":"742","s1":"1484"} +{"time":"743","s1":"1486"} +{"time":"744","s1":"1488"} +{"time":"745","s1":"1490"} +{"time":"746","s1":"1492"} +{"time":"747","s1":"1494"} +{"time":"748","s1":"1496"} +{"time":"749","s1":"1498"} +{"time":"750","s1":"1500"} +{"time":"751","s1":"1502"} +{"time":"752","s1":"1504"} +{"time":"753","s1":"1506"} +{"time":"754","s1":"1508"} +{"time":"755","s1":"1510"} +{"time":"756","s1":"1512"} +{"time":"757","s1":"1514"} +{"time":"758","s1":"1516"} +{"time":"759","s1":"1518"} +{"time":"760","s1":"1520"} +{"time":"761","s1":"1522"} +{"time":"762","s1":"1524"} +{"time":"763","s1":"1526"} +{"time":"764","s1":"1528"} +{"time":"765","s1":"1530"} +{"time":"766","s1":"1532"} +{"time":"767","s1":"1534"} +{"time":"768","s1":"1536"} +{"time":"769","s1":"1538"} +{"time":"770","s1":"1540"} +{"time":"771","s1":"1542"} +{"time":"772","s1":"1544"} +{"time":"773","s1":"1546"} +{"time":"774","s1":"1548"} +{"time":"775","s1":"1550"} +{"time":"776","s1":"1552"} +{"time":"777","s1":"1554"} +{"time":"778","s1":"1556"} +{"time":"779","s1":"1558"} +{"time":"780","s1":"1560"} +{"time":"781","s1":"1562"} +{"time":"782","s1":"1564"} +{"time":"783","s1":"1566"} +{"time":"784","s1":"1568"} +{"time":"785","s1":"1570"} +{"time":"786","s1":"1572"} +{"time":"787","s1":"1574"} +{"time":"788","s1":"1576"} +{"time":"789","s1":"1578"} +{"time":"790","s1":"1580"} +{"time":"791","s1":"1582"} +{"time":"792","s1":"1584"} +{"time":"793","s1":"1586"} +{"time":"794","s1":"1588"} +{"time":"795","s1":"1590"} +{"time":"796","s1":"1592"} +{"time":"797","s1":"1594"} +{"time":"798","s1":"1596"} +{"time":"799","s1":"1598"} +{"time":"800","s1":"1600"} +{"time":"801","s1":"1602"} +{"time":"802","s1":"1604"} +{"time":"803","s1":"1606"} +{"time":"804","s1":"1608"} +{"time":"805","s1":"1610"} +{"time":"806","s1":"1612"} +{"time":"807","s1":"1614"} +{"time":"808","s1":"1616"} +{"time":"809","s1":"1618"} +{"time":"810","s1":"1620"} +{"time":"811","s1":"1622"} +{"time":"812","s1":"1624"} +{"time":"813","s1":"1626"} +{"time":"814","s1":"1628"} +{"time":"815","s1":"1630"} +{"time":"816","s1":"1632"} +{"time":"817","s1":"1634"} +{"time":"818","s1":"1636"} +{"time":"819","s1":"1638"} +{"time":"820","s1":"1640"} +{"time":"821","s1":"1642"} +{"time":"822","s1":"1644"} +{"time":"823","s1":"1646"} +{"time":"824","s1":"1648"} +{"time":"825","s1":"1650"} +{"time":"826","s1":"1652"} +{"time":"827","s1":"1654"} +{"time":"828","s1":"1656"} +{"time":"829","s1":"1658"} +{"time":"830","s1":"1660"} +{"time":"831","s1":"1662"} +{"time":"832","s1":"1664"} +{"time":"833","s1":"1666"} +{"time":"834","s1":"1668"} +{"time":"835","s1":"1670"} +{"time":"836","s1":"1672"} +{"time":"837","s1":"1674"} +{"time":"838","s1":"1676"} +{"time":"839","s1":"1678"} +{"time":"840","s1":"1680"} +{"time":"841","s1":"1682"} +{"time":"842","s1":"1684"} +{"time":"843","s1":"1686"} +{"time":"844","s1":"1688"} +{"time":"845","s1":"1690"} +{"time":"846","s1":"1692"} +{"time":"847","s1":"1694"} +{"time":"848","s1":"1696"} +{"time":"849","s1":"1698"} +{"time":"850","s1":"1700"} +{"time":"851","s1":"1702"} +{"time":"852","s1":"1704"} +{"time":"853","s1":"1706"} +{"time":"854","s1":"1708"} +{"time":"855","s1":"1710"} +{"time":"856","s1":"1712"} +{"time":"857","s1":"1714"} +{"time":"858","s1":"1716"} +{"time":"859","s1":"1718"} +{"time":"860","s1":"1720"} +{"time":"861","s1":"1722"} +{"time":"862","s1":"1724"} +{"time":"863","s1":"1726"} +{"time":"864","s1":"1728"} +{"time":"865","s1":"1730"} +{"time":"866","s1":"1732"} +{"time":"867","s1":"1734"} +{"time":"868","s1":"1736"} +{"time":"869","s1":"1738"} +{"time":"870","s1":"1740"} +{"time":"871","s1":"1742"} +{"time":"872","s1":"1744"} +{"time":"873","s1":"1746"} +{"time":"874","s1":"1748"} +{"time":"875","s1":"1750"} +{"time":"876","s1":"1752"} +{"time":"877","s1":"1754"} +{"time":"878","s1":"1756"} +{"time":"879","s1":"1758"} +{"time":"880","s1":"1760"} +{"time":"881","s1":"1762"} +{"time":"882","s1":"1764"} +{"time":"883","s1":"1766"} +{"time":"884","s1":"1768"} +{"time":"885","s1":"1770"} +{"time":"886","s1":"1772"} +{"time":"887","s1":"1774"} +{"time":"888","s1":"1776"} +{"time":"889","s1":"1778"} +{"time":"890","s1":"1780"} +{"time":"891","s1":"1782"} +{"time":"892","s1":"1784"} +{"time":"893","s1":"1786"} +{"time":"894","s1":"1788"} +{"time":"895","s1":"1790"} +{"time":"896","s1":"1792"} +{"time":"897","s1":"1794"} +{"time":"898","s1":"1796"} +{"time":"899","s1":"1798"} +{"time":"900","s1":"1800"} +{"time":"901","s1":"1802"} +{"time":"902","s1":"1804"} +{"time":"903","s1":"1806"} +{"time":"904","s1":"1808"} +{"time":"905","s1":"1810"} +{"time":"906","s1":"1812"} +{"time":"907","s1":"1814"} +{"time":"908","s1":"1816"} +{"time":"909","s1":"1818"} +{"time":"910","s1":"1820"} +{"time":"911","s1":"1822"} +{"time":"912","s1":"1824"} +{"time":"913","s1":"1826"} +{"time":"914","s1":"1828"} +{"time":"915","s1":"1830"} +{"time":"916","s1":"1832"} +{"time":"917","s1":"1834"} +{"time":"918","s1":"1836"} +{"time":"919","s1":"1838"} +{"time":"920","s1":"1840"} +{"time":"921","s1":"1842"} +{"time":"922","s1":"1844"} +{"time":"923","s1":"1846"} +{"time":"924","s1":"1848"} +{"time":"925","s1":"1850"} +{"time":"926","s1":"1852"} +{"time":"927","s1":"1854"} +{"time":"928","s1":"1856"} +{"time":"929","s1":"1858"} +{"time":"930","s1":"1860"} +{"time":"931","s1":"1862"} +{"time":"932","s1":"1864"} +{"time":"933","s1":"1866"} +{"time":"934","s1":"1868"} +{"time":"935","s1":"1870"} +{"time":"936","s1":"1872"} +{"time":"937","s1":"1874"} +{"time":"938","s1":"1876"} +{"time":"939","s1":"1878"} +{"time":"940","s1":"1880"} +{"time":"941","s1":"1882"} +{"time":"942","s1":"1884"} +{"time":"943","s1":"1886"} +{"time":"944","s1":"1888"} +{"time":"945","s1":"1890"} +{"time":"946","s1":"1892"} +{"time":"947","s1":"1894"} +{"time":"948","s1":"1896"} +{"time":"949","s1":"1898"} +{"time":"950","s1":"1900"} +{"time":"951","s1":"1902"} +{"time":"952","s1":"1904"} +{"time":"953","s1":"1906"} +{"time":"954","s1":"1908"} +{"time":"955","s1":"1910"} +{"time":"956","s1":"1912"} +{"time":"957","s1":"1914"} +{"time":"958","s1":"1916"} +{"time":"959","s1":"1918"} +{"time":"960","s1":"1920"} +{"time":"961","s1":"1922"} +{"time":"962","s1":"1924"} +{"time":"963","s1":"1926"} +{"time":"964","s1":"1928"} +{"time":"965","s1":"1930"} +{"time":"966","s1":"1932"} +{"time":"967","s1":"1934"} +{"time":"968","s1":"1936"} +{"time":"969","s1":"1938"} +{"time":"970","s1":"1940"} +{"time":"971","s1":"1942"} +{"time":"972","s1":"1944"} +{"time":"973","s1":"1946"} +{"time":"974","s1":"1948"} +{"time":"975","s1":"1950"} +{"time":"976","s1":"1952"} +{"time":"977","s1":"1954"} +{"time":"978","s1":"1956"} +{"time":"979","s1":"1958"} +{"time":"980","s1":"1960"} +{"time":"981","s1":"1962"} +{"time":"982","s1":"1964"} +{"time":"983","s1":"1966"} +{"time":"984","s1":"1968"} +{"time":"985","s1":"1970"} +{"time":"986","s1":"1972"} +{"time":"987","s1":"1974"} +{"time":"988","s1":"1976"} +{"time":"989","s1":"1978"} +{"time":"990","s1":"1980"} +{"time":"991","s1":"1982"} +{"time":"992","s1":"1984"} +{"time":"993","s1":"1986"} +{"time":"994","s1":"1988"} +{"time":"995","s1":"1990"} +{"time":"996","s1":"1992"} +{"time":"997","s1":"1994"} +{"time":"998","s1":"1996"} +{"time":"999","s1":"1998"} +{"time":"1000","s1":"2000"} +{"time":"1001","s1":"2002"} +{"time":"1002","s1":"2004"} +{"time":"1003","s1":"2006"} +{"time":"1004","s1":"2008"} +{"time":"1005","s1":"2010"} +{"time":"1006","s1":"2012"} +{"time":"1007","s1":"2014"} +{"time":"1008","s1":"2016"} +{"time":"1009","s1":"2018"} +{"time":"1010","s1":"2020"} +{"time":"1011","s1":"2022"} +{"time":"1012","s1":"2024"} +{"time":"1013","s1":"2026"} +{"time":"1014","s1":"2028"} +{"time":"1015","s1":"2030"} +{"time":"1016","s1":"2032"} +{"time":"1017","s1":"2034"} +{"time":"1018","s1":"2036"} +{"time":"1019","s1":"2038"} +{"time":"1020","s1":"2040"} +{"time":"1021","s1":"2042"} +{"time":"1022","s1":"2044"} +{"time":"1023","s1":"2046"} +{"time":"1024","s1":"2048"} +{"time":"1025","s1":"2050"} +{"time":"1026","s1":"2052"} +{"time":"1027","s1":"2054"} +{"time":"1028","s1":"2056"} +{"time":"1029","s1":"2058"} +{"time":"1030","s1":"2060"} +{"time":"1031","s1":"2062"} +{"time":"1032","s1":"2064"} +{"time":"1033","s1":"2066"} +{"time":"1034","s1":"2068"} +{"time":"1035","s1":"2070"} +{"time":"1036","s1":"2072"} +{"time":"1037","s1":"2074"} +{"time":"1038","s1":"2076"} +{"time":"1039","s1":"2078"} +{"time":"1040","s1":"2080"} +{"time":"1041","s1":"2082"} +{"time":"1042","s1":"2084"} +{"time":"1043","s1":"2086"} +{"time":"1044","s1":"2088"} +{"time":"1045","s1":"2090"} +{"time":"1046","s1":"2092"} +{"time":"1047","s1":"2094"} +{"time":"1048","s1":"2096"} +{"time":"1049","s1":"2098"} +{"time":"1050","s1":"2100"} +{"time":"1051","s1":"2102"} +{"time":"1052","s1":"2104"} +{"time":"1053","s1":"2106"} +{"time":"1054","s1":"2108"} +{"time":"1055","s1":"2110"} +{"time":"1056","s1":"2112"} +{"time":"1057","s1":"2114"} +{"time":"1058","s1":"2116"} +{"time":"1059","s1":"2118"} +{"time":"1060","s1":"2120"} +{"time":"1061","s1":"2122"} +{"time":"1062","s1":"2124"} +{"time":"1063","s1":"2126"} +{"time":"1064","s1":"2128"} +{"time":"1065","s1":"2130"} +{"time":"1066","s1":"2132"} +{"time":"1067","s1":"2134"} +{"time":"1068","s1":"2136"} +{"time":"1069","s1":"2138"} +{"time":"1070","s1":"2140"} +{"time":"1071","s1":"2142"} +{"time":"1072","s1":"2144"} +{"time":"1073","s1":"2146"} +{"time":"1074","s1":"2148"} +{"time":"1075","s1":"2150"} +{"time":"1076","s1":"2152"} +{"time":"1077","s1":"2154"} +{"time":"1078","s1":"2156"} +{"time":"1079","s1":"2158"} +{"time":"1080","s1":"2160"} +{"time":"1081","s1":"2162"} +{"time":"1082","s1":"2164"} +{"time":"1083","s1":"2166"} +{"time":"1084","s1":"2168"} +{"time":"1085","s1":"2170"} +{"time":"1086","s1":"2172"} +{"time":"1087","s1":"2174"} +{"time":"1088","s1":"2176"} +{"time":"1089","s1":"2178"} +{"time":"1090","s1":"2180"} +{"time":"1091","s1":"2182"} +{"time":"1092","s1":"2184"} +{"time":"1093","s1":"2186"} +{"time":"1094","s1":"2188"} +{"time":"1095","s1":"2190"} +{"time":"1096","s1":"2192"} +{"time":"1097","s1":"2194"} +{"time":"1098","s1":"2196"} +{"time":"1099","s1":"2198"} +{"time":"1100","s1":"2200"} +{"time":"1101","s1":"2202"} +{"time":"1102","s1":"2204"} +{"time":"1103","s1":"2206"} +{"time":"1104","s1":"2208"} +{"time":"1105","s1":"2210"} +{"time":"1106","s1":"2212"} +{"time":"1107","s1":"2214"} +{"time":"1108","s1":"2216"} +{"time":"1109","s1":"2218"} +{"time":"1110","s1":"2220"} +{"time":"1111","s1":"2222"} +{"time":"1112","s1":"2224"} +{"time":"1113","s1":"2226"} +{"time":"1114","s1":"2228"} +{"time":"1115","s1":"2230"} +{"time":"1116","s1":"2232"} +{"time":"1117","s1":"2234"} +{"time":"1118","s1":"2236"} +{"time":"1119","s1":"2238"} +{"time":"1120","s1":"2240"} +{"time":"1121","s1":"2242"} +{"time":"1122","s1":"2244"} +{"time":"1123","s1":"2246"} +{"time":"1124","s1":"2248"} +{"time":"1125","s1":"2250"} +{"time":"1126","s1":"2252"} +{"time":"1127","s1":"2254"} +{"time":"1128","s1":"2256"} +{"time":"1129","s1":"2258"} +{"time":"1130","s1":"2260"} +{"time":"1131","s1":"2262"} +{"time":"1132","s1":"2264"} +{"time":"1133","s1":"2266"} +{"time":"1134","s1":"2268"} +{"time":"1135","s1":"2270"} +{"time":"1136","s1":"2272"} +{"time":"1137","s1":"2274"} +{"time":"1138","s1":"2276"} +{"time":"1139","s1":"2278"} +{"time":"1140","s1":"2280"} +{"time":"1141","s1":"2282"} +{"time":"1142","s1":"2284"} +{"time":"1143","s1":"2286"} +{"time":"1144","s1":"2288"} +{"time":"1145","s1":"2290"} +{"time":"1146","s1":"2292"} +{"time":"1147","s1":"2294"} +{"time":"1148","s1":"2296"} +{"time":"1149","s1":"2298"} +{"time":"1150","s1":"2300"} +{"time":"1151","s1":"2302"} +{"time":"1152","s1":"2304"} +{"time":"1153","s1":"2306"} +{"time":"1154","s1":"2308"} +{"time":"1155","s1":"2310"} +{"time":"1156","s1":"2312"} +{"time":"1157","s1":"2314"} +{"time":"1158","s1":"2316"} +{"time":"1159","s1":"2318"} +{"time":"1160","s1":"2320"} +{"time":"1161","s1":"2322"} +{"time":"1162","s1":"2324"} +{"time":"1163","s1":"2326"} +{"time":"1164","s1":"2328"} +{"time":"1165","s1":"2330"} +{"time":"1166","s1":"2332"} +{"time":"1167","s1":"2334"} +{"time":"1168","s1":"2336"} +{"time":"1169","s1":"2338"} +{"time":"1170","s1":"2340"} +{"time":"1171","s1":"2342"} +{"time":"1172","s1":"2344"} +{"time":"1173","s1":"2346"} +{"time":"1174","s1":"2348"} +{"time":"1175","s1":"2350"} +{"time":"1176","s1":"2352"} +{"time":"1177","s1":"2354"} +{"time":"1178","s1":"2356"} +{"time":"1179","s1":"2358"} +{"time":"1180","s1":"2360"} +{"time":"1181","s1":"2362"} +{"time":"1182","s1":"2364"} +{"time":"1183","s1":"2366"} +{"time":"1184","s1":"2368"} +{"time":"1185","s1":"2370"} +{"time":"1186","s1":"2372"} +{"time":"1187","s1":"2374"} +{"time":"1188","s1":"2376"} +{"time":"1189","s1":"2378"} +{"time":"1190","s1":"2380"} +{"time":"1191","s1":"2382"} +{"time":"1192","s1":"2384"} +{"time":"1193","s1":"2386"} +{"time":"1194","s1":"2388"} +{"time":"1195","s1":"2390"} +{"time":"1196","s1":"2392"} +{"time":"1197","s1":"2394"} +{"time":"1198","s1":"2396"} +{"time":"1199","s1":"2398"} +{"time":"1200","s1":"2400"} +{"time":"1201","s1":"2402"} +{"time":"1202","s1":"2404"} +{"time":"1203","s1":"2406"} +{"time":"1204","s1":"2408"} +{"time":"1205","s1":"2410"} +{"time":"1206","s1":"2412"} +{"time":"1207","s1":"2414"} +{"time":"1208","s1":"2416"} +{"time":"1209","s1":"2418"} +{"time":"1210","s1":"2420"} +{"time":"1211","s1":"2422"} +{"time":"1212","s1":"2424"} +{"time":"1213","s1":"2426"} +{"time":"1214","s1":"2428"} +{"time":"1215","s1":"2430"} +{"time":"1216","s1":"2432"} +{"time":"1217","s1":"2434"} +{"time":"1218","s1":"2436"} +{"time":"1219","s1":"2438"} +{"time":"1220","s1":"2440"} +{"time":"1221","s1":"2442"} +{"time":"1222","s1":"2444"} +{"time":"1223","s1":"2446"} +{"time":"1224","s1":"2448"} +{"time":"1225","s1":"2450"} +{"time":"1226","s1":"2452"} +{"time":"1227","s1":"2454"} +{"time":"1228","s1":"2456"} +{"time":"1229","s1":"2458"} +{"time":"1230","s1":"2460"} +{"time":"1231","s1":"2462"} +{"time":"1232","s1":"2464"} +{"time":"1233","s1":"2466"} +{"time":"1234","s1":"2468"} +{"time":"1235","s1":"2470"} +{"time":"1236","s1":"2472"} +{"time":"1237","s1":"2474"} +{"time":"1238","s1":"2476"} +{"time":"1239","s1":"2478"} +{"time":"1240","s1":"2480"} +{"time":"1241","s1":"2482"} +{"time":"1242","s1":"2484"} +{"time":"1243","s1":"2486"} +{"time":"1244","s1":"2488"} +{"time":"1245","s1":"2490"} +{"time":"1246","s1":"2492"} +{"time":"1247","s1":"2494"} +{"time":"1248","s1":"2496"} +{"time":"1249","s1":"2498"} +{"time":"1250","s1":"2500"} +{"time":"1251","s1":"2502"} +{"time":"1252","s1":"2504"} +{"time":"1253","s1":"2506"} +{"time":"1254","s1":"2508"} +{"time":"1255","s1":"2510"} +{"time":"1256","s1":"2512"} +{"time":"1257","s1":"2514"} +{"time":"1258","s1":"2516"} +{"time":"1259","s1":"2518"} +{"time":"1260","s1":"2520"} +{"time":"1261","s1":"2522"} +{"time":"1262","s1":"2524"} +{"time":"1263","s1":"2526"} +{"time":"1264","s1":"2528"} +{"time":"1265","s1":"2530"} +{"time":"1266","s1":"2532"} +{"time":"1267","s1":"2534"} +{"time":"1268","s1":"2536"} +{"time":"1269","s1":"2538"} +{"time":"1270","s1":"2540"} +{"time":"1271","s1":"2542"} +{"time":"1272","s1":"2544"} +{"time":"1273","s1":"2546"} +{"time":"1274","s1":"2548"} +{"time":"1275","s1":"2550"} +{"time":"1276","s1":"2552"} +{"time":"1277","s1":"2554"} +{"time":"1278","s1":"2556"} +{"time":"1279","s1":"2558"} +{"time":"1280","s1":"2560"} +{"time":"1281","s1":"2562"} +{"time":"1282","s1":"2564"} +{"time":"1283","s1":"2566"} +{"time":"1284","s1":"2568"} +{"time":"1285","s1":"2570"} +{"time":"1286","s1":"2572"} +{"time":"1287","s1":"2574"} +{"time":"1288","s1":"2576"} +{"time":"1289","s1":"2578"} +{"time":"1290","s1":"2580"} +{"time":"1291","s1":"2582"} +{"time":"1292","s1":"2584"} +{"time":"1293","s1":"2586"} +{"time":"1294","s1":"2588"} +{"time":"1295","s1":"2590"} +{"time":"1296","s1":"2592"} +{"time":"1297","s1":"2594"} +{"time":"1298","s1":"2596"} +{"time":"1299","s1":"2598"} +{"time":"1300","s1":"2600"} +{"time":"1301","s1":"2602"} +{"time":"1302","s1":"2604"} +{"time":"1303","s1":"2606"} +{"time":"1304","s1":"2608"} +{"time":"1305","s1":"2610"} +{"time":"1306","s1":"2612"} +{"time":"1307","s1":"2614"} +{"time":"1308","s1":"2616"} +{"time":"1309","s1":"2618"} +{"time":"1310","s1":"2620"} +{"time":"1311","s1":"2622"} +{"time":"1312","s1":"2624"} +{"time":"1313","s1":"2626"} +{"time":"1314","s1":"2628"} +{"time":"1315","s1":"2630"} +{"time":"1316","s1":"2632"} +{"time":"1317","s1":"2634"} +{"time":"1318","s1":"2636"} +{"time":"1319","s1":"2638"} +{"time":"1320","s1":"2640"} +{"time":"1321","s1":"2642"} +{"time":"1322","s1":"2644"} +{"time":"1323","s1":"2646"} +{"time":"1324","s1":"2648"} +{"time":"1325","s1":"2650"} +{"time":"1326","s1":"2652"} +{"time":"1327","s1":"2654"} +{"time":"1328","s1":"2656"} +{"time":"1329","s1":"2658"} +{"time":"1330","s1":"2660"} +{"time":"1331","s1":"2662"} +{"time":"1332","s1":"2664"} +{"time":"1333","s1":"2666"} +{"time":"1334","s1":"2668"} +{"time":"1335","s1":"2670"} +{"time":"1336","s1":"2672"} +{"time":"1337","s1":"2674"} +{"time":"1338","s1":"2676"} +{"time":"1339","s1":"2678"} +{"time":"1340","s1":"2680"} +{"time":"1341","s1":"2682"} +{"time":"1342","s1":"2684"} +{"time":"1343","s1":"2686"} +{"time":"1344","s1":"2688"} +{"time":"1345","s1":"2690"} +{"time":"1346","s1":"2692"} +{"time":"1347","s1":"2694"} +{"time":"1348","s1":"2696"} +{"time":"1349","s1":"2698"} +{"time":"1350","s1":"2700"} +{"time":"1351","s1":"2702"} +{"time":"1352","s1":"2704"} +{"time":"1353","s1":"2706"} +{"time":"1354","s1":"2708"} +{"time":"1355","s1":"2710"} +{"time":"1356","s1":"2712"} +{"time":"1357","s1":"2714"} +{"time":"1358","s1":"2716"} +{"time":"1359","s1":"2718"} +{"time":"1360","s1":"2720"} +{"time":"1361","s1":"2722"} +{"time":"1362","s1":"2724"} +{"time":"1363","s1":"2726"} +{"time":"1364","s1":"2728"} +{"time":"1365","s1":"2730"} +{"time":"1366","s1":"2732"} +{"time":"1367","s1":"2734"} +{"time":"1368","s1":"2736"} +{"time":"1369","s1":"2738"} +{"time":"1370","s1":"2740"} +{"time":"1371","s1":"2742"} +{"time":"1372","s1":"2744"} +{"time":"1373","s1":"2746"} +{"time":"1374","s1":"2748"} +{"time":"1375","s1":"2750"} +{"time":"1376","s1":"2752"} +{"time":"1377","s1":"2754"} +{"time":"1378","s1":"2756"} +{"time":"1379","s1":"2758"} +{"time":"1380","s1":"2760"} +{"time":"1381","s1":"2762"} +{"time":"1382","s1":"2764"} +{"time":"1383","s1":"2766"} +{"time":"1384","s1":"2768"} +{"time":"1385","s1":"2770"} +{"time":"1386","s1":"2772"} +{"time":"1387","s1":"2774"} +{"time":"1388","s1":"2776"} +{"time":"1389","s1":"2778"} +{"time":"1390","s1":"2780"} +{"time":"1391","s1":"2782"} +{"time":"1392","s1":"2784"} +{"time":"1393","s1":"2786"} +{"time":"1394","s1":"2788"} +{"time":"1395","s1":"2790"} +{"time":"1396","s1":"2792"} +{"time":"1397","s1":"2794"} +{"time":"1398","s1":"2796"} +{"time":"1399","s1":"2798"} +{"time":"1400","s1":"2800"} +{"time":"1401","s1":"2802"} +{"time":"1402","s1":"2804"} +{"time":"1403","s1":"2806"} +{"time":"1404","s1":"2808"} +{"time":"1405","s1":"2810"} +{"time":"1406","s1":"2812"} +{"time":"1407","s1":"2814"} +{"time":"1408","s1":"2816"} +{"time":"1409","s1":"2818"} +{"time":"1410","s1":"2820"} +{"time":"1411","s1":"2822"} +{"time":"1412","s1":"2824"} +{"time":"1413","s1":"2826"} +{"time":"1414","s1":"2828"} +{"time":"1415","s1":"2830"} +{"time":"1416","s1":"2832"} +{"time":"1417","s1":"2834"} +{"time":"1418","s1":"2836"} +{"time":"1419","s1":"2838"} +{"time":"1420","s1":"2840"} +{"time":"1421","s1":"2842"} +{"time":"1422","s1":"2844"} +{"time":"1423","s1":"2846"} +{"time":"1424","s1":"2848"} +{"time":"1425","s1":"2850"} +{"time":"1426","s1":"2852"} +{"time":"1427","s1":"2854"} +{"time":"1428","s1":"2856"} +{"time":"1429","s1":"2858"} +{"time":"1430","s1":"2860"} +{"time":"1431","s1":"2862"} +{"time":"1432","s1":"2864"} +{"time":"1433","s1":"2866"} +{"time":"1434","s1":"2868"} +{"time":"1435","s1":"2870"} +{"time":"1436","s1":"2872"} +{"time":"1437","s1":"2874"} +{"time":"1438","s1":"2876"} +{"time":"1439","s1":"2878"} +{"time":"1440","s1":"2880"} +{"time":"1441","s1":"2882"} +{"time":"1442","s1":"2884"} +{"time":"1443","s1":"2886"} +{"time":"1444","s1":"2888"} +{"time":"1445","s1":"2890"} +{"time":"1446","s1":"2892"} +{"time":"1447","s1":"2894"} +{"time":"1448","s1":"2896"} +{"time":"1449","s1":"2898"} +{"time":"1450","s1":"2900"} +{"time":"1451","s1":"2902"} +{"time":"1452","s1":"2904"} +{"time":"1453","s1":"2906"} +{"time":"1454","s1":"2908"} +{"time":"1455","s1":"2910"} +{"time":"1456","s1":"2912"} +{"time":"1457","s1":"2914"} +{"time":"1458","s1":"2916"} +{"time":"1459","s1":"2918"} +{"time":"1460","s1":"2920"} +{"time":"1461","s1":"2922"} +{"time":"1462","s1":"2924"} +{"time":"1463","s1":"2926"} +{"time":"1464","s1":"2928"} +{"time":"1465","s1":"2930"} +{"time":"1466","s1":"2932"} +{"time":"1467","s1":"2934"} +{"time":"1468","s1":"2936"} +{"time":"1469","s1":"2938"} +{"time":"1470","s1":"2940"} +{"time":"1471","s1":"2942"} +{"time":"1472","s1":"2944"} +{"time":"1473","s1":"2946"} +{"time":"1474","s1":"2948"} +{"time":"1475","s1":"2950"} +{"time":"1476","s1":"2952"} +{"time":"1477","s1":"2954"} +{"time":"1478","s1":"2956"} +{"time":"1479","s1":"2958"} +{"time":"1480","s1":"2960"} +{"time":"1481","s1":"2962"} +{"time":"1482","s1":"2964"} +{"time":"1483","s1":"2966"} +{"time":"1484","s1":"2968"} +{"time":"1485","s1":"2970"} +{"time":"1486","s1":"2972"} +{"time":"1487","s1":"2974"} +{"time":"1488","s1":"2976"} +{"time":"1489","s1":"2978"} +{"time":"1490","s1":"2980"} +{"time":"1491","s1":"2982"} +{"time":"1492","s1":"2984"} +{"time":"1493","s1":"2986"} +{"time":"1494","s1":"2988"} +{"time":"1495","s1":"2990"} +{"time":"1496","s1":"2992"} +{"time":"1497","s1":"2994"} +{"time":"1498","s1":"2996"} +{"time":"1499","s1":"2998"} +{"time":"1500","s1":"3000"} +{"time":"1501","s1":"3002"} +{"time":"1502","s1":"3004"} +{"time":"1503","s1":"3006"} +{"time":"1504","s1":"3008"} +{"time":"1505","s1":"3010"} +{"time":"1506","s1":"3012"} +{"time":"1507","s1":"3014"} +{"time":"1508","s1":"3016"} +{"time":"1509","s1":"3018"} +{"time":"1510","s1":"3020"} +{"time":"1511","s1":"3022"} +{"time":"1512","s1":"3024"} +{"time":"1513","s1":"3026"} +{"time":"1514","s1":"3028"} +{"time":"1515","s1":"3030"} +{"time":"1516","s1":"3032"} +{"time":"1517","s1":"3034"} +{"time":"1518","s1":"3036"} +{"time":"1519","s1":"3038"} +{"time":"1520","s1":"3040"} +{"time":"1521","s1":"3042"} +{"time":"1522","s1":"3044"} +{"time":"1523","s1":"3046"} +{"time":"1524","s1":"3048"} +{"time":"1525","s1":"3050"} +{"time":"1526","s1":"3052"} +{"time":"1527","s1":"3054"} +{"time":"1528","s1":"3056"} +{"time":"1529","s1":"3058"} +{"time":"1530","s1":"3060"} +{"time":"1531","s1":"3062"} +{"time":"1532","s1":"3064"} +{"time":"1533","s1":"3066"} +{"time":"1534","s1":"3068"} +{"time":"1535","s1":"3070"} +{"time":"1536","s1":"3072"} +{"time":"1537","s1":"3074"} +{"time":"1538","s1":"3076"} +{"time":"1539","s1":"3078"} +{"time":"1540","s1":"3080"} +{"time":"1541","s1":"3082"} +{"time":"1542","s1":"3084"} +{"time":"1543","s1":"3086"} +{"time":"1544","s1":"3088"} +{"time":"1545","s1":"3090"} +{"time":"1546","s1":"3092"} +{"time":"1547","s1":"3094"} +{"time":"1548","s1":"3096"} +{"time":"1549","s1":"3098"} +{"time":"1550","s1":"3100"} +{"time":"1551","s1":"3102"} +{"time":"1552","s1":"3104"} +{"time":"1553","s1":"3106"} +{"time":"1554","s1":"3108"} +{"time":"1555","s1":"3110"} +{"time":"1556","s1":"3112"} +{"time":"1557","s1":"3114"} +{"time":"1558","s1":"3116"} +{"time":"1559","s1":"3118"} +{"time":"1560","s1":"3120"} +{"time":"1561","s1":"3122"} +{"time":"1562","s1":"3124"} +{"time":"1563","s1":"3126"} +{"time":"1564","s1":"3128"} +{"time":"1565","s1":"3130"} +{"time":"1566","s1":"3132"} +{"time":"1567","s1":"3134"} +{"time":"1568","s1":"3136"} +{"time":"1569","s1":"3138"} +{"time":"1570","s1":"3140"} +{"time":"1571","s1":"3142"} +{"time":"1572","s1":"3144"} +{"time":"1573","s1":"3146"} +{"time":"1574","s1":"3148"} +{"time":"1575","s1":"3150"} +{"time":"1576","s1":"3152"} +{"time":"1577","s1":"3154"} +{"time":"1578","s1":"3156"} +{"time":"1579","s1":"3158"} +{"time":"1580","s1":"3160"} +{"time":"1581","s1":"3162"} +{"time":"1582","s1":"3164"} +{"time":"1583","s1":"3166"} +{"time":"1584","s1":"3168"} +{"time":"1585","s1":"3170"} +{"time":"1586","s1":"3172"} +{"time":"1587","s1":"3174"} +{"time":"1588","s1":"3176"} +{"time":"1589","s1":"3178"} +{"time":"1590","s1":"3180"} +{"time":"1591","s1":"3182"} +{"time":"1592","s1":"3184"} +{"time":"1593","s1":"3186"} +{"time":"1594","s1":"3188"} +{"time":"1595","s1":"3190"} +{"time":"1596","s1":"3192"} +{"time":"1597","s1":"3194"} +{"time":"1598","s1":"3196"} +{"time":"1599","s1":"3198"} +{"time":"1600","s1":"3200"} +{"time":"1601","s1":"3202"} +{"time":"1602","s1":"3204"} +{"time":"1603","s1":"3206"} +{"time":"1604","s1":"3208"} +{"time":"1605","s1":"3210"} +{"time":"1606","s1":"3212"} +{"time":"1607","s1":"3214"} +{"time":"1608","s1":"3216"} +{"time":"1609","s1":"3218"} +{"time":"1610","s1":"3220"} +{"time":"1611","s1":"3222"} +{"time":"1612","s1":"3224"} +{"time":"1613","s1":"3226"} +{"time":"1614","s1":"3228"} +{"time":"1615","s1":"3230"} +{"time":"1616","s1":"3232"} +{"time":"1617","s1":"3234"} +{"time":"1618","s1":"3236"} +{"time":"1619","s1":"3238"} +{"time":"1620","s1":"3240"} +{"time":"1621","s1":"3242"} +{"time":"1622","s1":"3244"} +{"time":"1623","s1":"3246"} +{"time":"1624","s1":"3248"} +{"time":"1625","s1":"3250"} +{"time":"1626","s1":"3252"} +{"time":"1627","s1":"3254"} +{"time":"1628","s1":"3256"} +{"time":"1629","s1":"3258"} +{"time":"1630","s1":"3260"} +{"time":"1631","s1":"3262"} +{"time":"1632","s1":"3264"} +{"time":"1633","s1":"3266"} +{"time":"1634","s1":"3268"} +{"time":"1635","s1":"3270"} +{"time":"1636","s1":"3272"} +{"time":"1637","s1":"3274"} +{"time":"1638","s1":"3276"} +{"time":"1639","s1":"3278"} +{"time":"1640","s1":"3280"} +{"time":"1641","s1":"3282"} +{"time":"1642","s1":"3284"} +{"time":"1643","s1":"3286"} +{"time":"1644","s1":"3288"} +{"time":"1645","s1":"3290"} +{"time":"1646","s1":"3292"} +{"time":"1647","s1":"3294"} +{"time":"1648","s1":"3296"} +{"time":"1649","s1":"3298"} +{"time":"1650","s1":"3300"} +{"time":"1651","s1":"3302"} +{"time":"1652","s1":"3304"} +{"time":"1653","s1":"3306"} +{"time":"1654","s1":"3308"} +{"time":"1655","s1":"3310"} +{"time":"1656","s1":"3312"} +{"time":"1657","s1":"3314"} +{"time":"1658","s1":"3316"} +{"time":"1659","s1":"3318"} +{"time":"1660","s1":"3320"} +{"time":"1661","s1":"3322"} +{"time":"1662","s1":"3324"} +{"time":"1663","s1":"3326"} +{"time":"1664","s1":"3328"} +{"time":"1665","s1":"3330"} +{"time":"1666","s1":"3332"} +{"time":"1667","s1":"3334"} +{"time":"1668","s1":"3336"} +{"time":"1669","s1":"3338"} +{"time":"1670","s1":"3340"} +{"time":"1671","s1":"3342"} +{"time":"1672","s1":"3344"} +{"time":"1673","s1":"3346"} +{"time":"1674","s1":"3348"} +{"time":"1675","s1":"3350"} +{"time":"1676","s1":"3352"} +{"time":"1677","s1":"3354"} +{"time":"1678","s1":"3356"} +{"time":"1679","s1":"3358"} +{"time":"1680","s1":"3360"} +{"time":"1681","s1":"3362"} +{"time":"1682","s1":"3364"} +{"time":"1683","s1":"3366"} +{"time":"1684","s1":"3368"} +{"time":"1685","s1":"3370"} +{"time":"1686","s1":"3372"} +{"time":"1687","s1":"3374"} +{"time":"1688","s1":"3376"} +{"time":"1689","s1":"3378"} +{"time":"1690","s1":"3380"} +{"time":"1691","s1":"3382"} +{"time":"1692","s1":"3384"} +{"time":"1693","s1":"3386"} +{"time":"1694","s1":"3388"} +{"time":"1695","s1":"3390"} +{"time":"1696","s1":"3392"} +{"time":"1697","s1":"3394"} +{"time":"1698","s1":"3396"} +{"time":"1699","s1":"3398"} +{"time":"1700","s1":"3400"} +{"time":"1701","s1":"3402"} +{"time":"1702","s1":"3404"} +{"time":"1703","s1":"3406"} +{"time":"1704","s1":"3408"} +{"time":"1705","s1":"3410"} +{"time":"1706","s1":"3412"} +{"time":"1707","s1":"3414"} +{"time":"1708","s1":"3416"} +{"time":"1709","s1":"3418"} +{"time":"1710","s1":"3420"} +{"time":"1711","s1":"3422"} +{"time":"1712","s1":"3424"} +{"time":"1713","s1":"3426"} +{"time":"1714","s1":"3428"} +{"time":"1715","s1":"3430"} +{"time":"1716","s1":"3432"} +{"time":"1717","s1":"3434"} +{"time":"1718","s1":"3436"} +{"time":"1719","s1":"3438"} +{"time":"1720","s1":"3440"} +{"time":"1721","s1":"3442"} +{"time":"1722","s1":"3444"} +{"time":"1723","s1":"3446"} +{"time":"1724","s1":"3448"} +{"time":"1725","s1":"3450"} +{"time":"1726","s1":"3452"} +{"time":"1727","s1":"3454"} +{"time":"1728","s1":"3456"} +{"time":"1729","s1":"3458"} +{"time":"1730","s1":"3460"} +{"time":"1731","s1":"3462"} +{"time":"1732","s1":"3464"} +{"time":"1733","s1":"3466"} +{"time":"1734","s1":"3468"} +{"time":"1735","s1":"3470"} +{"time":"1736","s1":"3472"} +{"time":"1737","s1":"3474"} +{"time":"1738","s1":"3476"} +{"time":"1739","s1":"3478"} +{"time":"1740","s1":"3480"} +{"time":"1741","s1":"3482"} +{"time":"1742","s1":"3484"} +{"time":"1743","s1":"3486"} +{"time":"1744","s1":"3488"} +{"time":"1745","s1":"3490"} +{"time":"1746","s1":"3492"} +{"time":"1747","s1":"3494"} +{"time":"1748","s1":"3496"} +{"time":"1749","s1":"3498"} +{"time":"1750","s1":"3500"} +{"time":"1751","s1":"3502"} +{"time":"1752","s1":"3504"} +{"time":"1753","s1":"3506"} +{"time":"1754","s1":"3508"} +{"time":"1755","s1":"3510"} +{"time":"1756","s1":"3512"} +{"time":"1757","s1":"3514"} +{"time":"1758","s1":"3516"} +{"time":"1759","s1":"3518"} +{"time":"1760","s1":"3520"} +{"time":"1761","s1":"3522"} +{"time":"1762","s1":"3524"} +{"time":"1763","s1":"3526"} +{"time":"1764","s1":"3528"} +{"time":"1765","s1":"3530"} +{"time":"1766","s1":"3532"} +{"time":"1767","s1":"3534"} +{"time":"1768","s1":"3536"} +{"time":"1769","s1":"3538"} +{"time":"1770","s1":"3540"} +{"time":"1771","s1":"3542"} +{"time":"1772","s1":"3544"} +{"time":"1773","s1":"3546"} +{"time":"1774","s1":"3548"} +{"time":"1775","s1":"3550"} +{"time":"1776","s1":"3552"} +{"time":"1777","s1":"3554"} +{"time":"1778","s1":"3556"} +{"time":"1779","s1":"3558"} +{"time":"1780","s1":"3560"} +{"time":"1781","s1":"3562"} +{"time":"1782","s1":"3564"} +{"time":"1783","s1":"3566"} +{"time":"1784","s1":"3568"} +{"time":"1785","s1":"3570"} +{"time":"1786","s1":"3572"} +{"time":"1787","s1":"3574"} +{"time":"1788","s1":"3576"} +{"time":"1789","s1":"3578"} +{"time":"1790","s1":"3580"} +{"time":"1791","s1":"3582"} +{"time":"1792","s1":"3584"} +{"time":"1793","s1":"3586"} +{"time":"1794","s1":"3588"} +{"time":"1795","s1":"3590"} +{"time":"1796","s1":"3592"} +{"time":"1797","s1":"3594"} +{"time":"1798","s1":"3596"} +{"time":"1799","s1":"3598"} +{"time":"1800","s1":"3600"} +{"time":"1801","s1":"3602"} +{"time":"1802","s1":"3604"} +{"time":"1803","s1":"3606"} +{"time":"1804","s1":"3608"} +{"time":"1805","s1":"3610"} +{"time":"1806","s1":"3612"} +{"time":"1807","s1":"3614"} +{"time":"1808","s1":"3616"} +{"time":"1809","s1":"3618"} +{"time":"1810","s1":"3620"} +{"time":"1811","s1":"3622"} +{"time":"1812","s1":"3624"} +{"time":"1813","s1":"3626"} +{"time":"1814","s1":"3628"} +{"time":"1815","s1":"3630"} +{"time":"1816","s1":"3632"} +{"time":"1817","s1":"3634"} +{"time":"1818","s1":"3636"} +{"time":"1819","s1":"3638"} +{"time":"1820","s1":"3640"} +{"time":"1821","s1":"3642"} +{"time":"1822","s1":"3644"} +{"time":"1823","s1":"3646"} +{"time":"1824","s1":"3648"} +{"time":"1825","s1":"3650"} +{"time":"1826","s1":"3652"} +{"time":"1827","s1":"3654"} +{"time":"1828","s1":"3656"} +{"time":"1829","s1":"3658"} +{"time":"1830","s1":"3660"} +{"time":"1831","s1":"3662"} +{"time":"1832","s1":"3664"} +{"time":"1833","s1":"3666"} +{"time":"1834","s1":"3668"} +{"time":"1835","s1":"3670"} +{"time":"1836","s1":"3672"} +{"time":"1837","s1":"3674"} +{"time":"1838","s1":"3676"} +{"time":"1839","s1":"3678"} +{"time":"1840","s1":"3680"} +{"time":"1841","s1":"3682"} +{"time":"1842","s1":"3684"} +{"time":"1843","s1":"3686"} +{"time":"1844","s1":"3688"} +{"time":"1845","s1":"3690"} +{"time":"1846","s1":"3692"} +{"time":"1847","s1":"3694"} +{"time":"1848","s1":"3696"} +{"time":"1849","s1":"3698"} +{"time":"1850","s1":"3700"} +{"time":"1851","s1":"3702"} +{"time":"1852","s1":"3704"} +{"time":"1853","s1":"3706"} +{"time":"1854","s1":"3708"} +{"time":"1855","s1":"3710"} +{"time":"1856","s1":"3712"} +{"time":"1857","s1":"3714"} +{"time":"1858","s1":"3716"} +{"time":"1859","s1":"3718"} +{"time":"1860","s1":"3720"} +{"time":"1861","s1":"3722"} +{"time":"1862","s1":"3724"} +{"time":"1863","s1":"3726"} +{"time":"1864","s1":"3728"} +{"time":"1865","s1":"3730"} +{"time":"1866","s1":"3732"} +{"time":"1867","s1":"3734"} +{"time":"1868","s1":"3736"} +{"time":"1869","s1":"3738"} +{"time":"1870","s1":"3740"} +{"time":"1871","s1":"3742"} +{"time":"1872","s1":"3744"} +{"time":"1873","s1":"3746"} +{"time":"1874","s1":"3748"} +{"time":"1875","s1":"3750"} +{"time":"1876","s1":"3752"} +{"time":"1877","s1":"3754"} +{"time":"1878","s1":"3756"} +{"time":"1879","s1":"3758"} +{"time":"1880","s1":"3760"} +{"time":"1881","s1":"3762"} +{"time":"1882","s1":"3764"} +{"time":"1883","s1":"3766"} +{"time":"1884","s1":"3768"} +{"time":"1885","s1":"3770"} +{"time":"1886","s1":"3772"} +{"time":"1887","s1":"3774"} +{"time":"1888","s1":"3776"} +{"time":"1889","s1":"3778"} +{"time":"1890","s1":"3780"} +{"time":"1891","s1":"3782"} +{"time":"1892","s1":"3784"} +{"time":"1893","s1":"3786"} +{"time":"1894","s1":"3788"} +{"time":"1895","s1":"3790"} +{"time":"1896","s1":"3792"} +{"time":"1897","s1":"3794"} +{"time":"1898","s1":"3796"} +{"time":"1899","s1":"3798"} +{"time":"1900","s1":"3800"} +{"time":"1901","s1":"3802"} +{"time":"1902","s1":"3804"} +{"time":"1903","s1":"3806"} +{"time":"1904","s1":"3808"} +{"time":"1905","s1":"3810"} +{"time":"1906","s1":"3812"} +{"time":"1907","s1":"3814"} +{"time":"1908","s1":"3816"} +{"time":"1909","s1":"3818"} +{"time":"1910","s1":"3820"} +{"time":"1911","s1":"3822"} +{"time":"1912","s1":"3824"} +{"time":"1913","s1":"3826"} +{"time":"1914","s1":"3828"} +{"time":"1915","s1":"3830"} +{"time":"1916","s1":"3832"} +{"time":"1917","s1":"3834"} +{"time":"1918","s1":"3836"} +{"time":"1919","s1":"3838"} +{"time":"1920","s1":"3840"} +{"time":"1921","s1":"3842"} +{"time":"1922","s1":"3844"} +{"time":"1923","s1":"3846"} +{"time":"1924","s1":"3848"} +{"time":"1925","s1":"3850"} +{"time":"1926","s1":"3852"} +{"time":"1927","s1":"3854"} +{"time":"1928","s1":"3856"} +{"time":"1929","s1":"3858"} +{"time":"1930","s1":"3860"} +{"time":"1931","s1":"3862"} +{"time":"1932","s1":"3864"} +{"time":"1933","s1":"3866"} +{"time":"1934","s1":"3868"} +{"time":"1935","s1":"3870"} +{"time":"1936","s1":"3872"} +{"time":"1937","s1":"3874"} +{"time":"1938","s1":"3876"} +{"time":"1939","s1":"3878"} +{"time":"1940","s1":"3880"} +{"time":"1941","s1":"3882"} +{"time":"1942","s1":"3884"} +{"time":"1943","s1":"3886"} +{"time":"1944","s1":"3888"} +{"time":"1945","s1":"3890"} +{"time":"1946","s1":"3892"} +{"time":"1947","s1":"3894"} +{"time":"1948","s1":"3896"} +{"time":"1949","s1":"3898"} +{"time":"1950","s1":"3900"} +{"time":"1951","s1":"3902"} +{"time":"1952","s1":"3904"} +{"time":"1953","s1":"3906"} +{"time":"1954","s1":"3908"} +{"time":"1955","s1":"3910"} +{"time":"1956","s1":"3912"} +{"time":"1957","s1":"3914"} +{"time":"1958","s1":"3916"} +{"time":"1959","s1":"3918"} +{"time":"1960","s1":"3920"} +{"time":"1961","s1":"3922"} +{"time":"1962","s1":"3924"} +{"time":"1963","s1":"3926"} +{"time":"1964","s1":"3928"} +{"time":"1965","s1":"3930"} +{"time":"1966","s1":"3932"} +{"time":"1967","s1":"3934"} +{"time":"1968","s1":"3936"} +{"time":"1969","s1":"3938"} +{"time":"1970","s1":"3940"} +{"time":"1971","s1":"3942"} +{"time":"1972","s1":"3944"} +{"time":"1973","s1":"3946"} +{"time":"1974","s1":"3948"} +{"time":"1975","s1":"3950"} +{"time":"1976","s1":"3952"} +{"time":"1977","s1":"3954"} +{"time":"1978","s1":"3956"} +{"time":"1979","s1":"3958"} +{"time":"1980","s1":"3960"} +{"time":"1981","s1":"3962"} +{"time":"1982","s1":"3964"} +{"time":"1983","s1":"3966"} +{"time":"1984","s1":"3968"} +{"time":"1985","s1":"3970"} +{"time":"1986","s1":"3972"} +{"time":"1987","s1":"3974"} +{"time":"1988","s1":"3976"} +{"time":"1989","s1":"3978"} +{"time":"1990","s1":"3980"} +{"time":"1991","s1":"3982"} +{"time":"1992","s1":"3984"} +{"time":"1993","s1":"3986"} +{"time":"1994","s1":"3988"} +{"time":"1995","s1":"3990"} +{"time":"1996","s1":"3992"} +{"time":"1997","s1":"3994"} +{"time":"1998","s1":"3996"} +{"time":"1999","s1":"3998"} +{"time":"2000","s1":"4000"} +{"time":"2001","s1":"4002"} +{"time":"2002","s1":"4004"} +{"time":"2003","s1":"4006"} +{"time":"2004","s1":"4008"} +{"time":"2005","s1":"4010"} +{"time":"2006","s1":"4012"} +{"time":"2007","s1":"4014"} +{"time":"2008","s1":"4016"} +{"time":"2009","s1":"4018"} +{"time":"2010","s1":"4020"} +{"time":"2011","s1":"4022"} +{"time":"2012","s1":"4024"} +{"time":"2013","s1":"4026"} +{"time":"2014","s1":"4028"} +{"time":"2015","s1":"4030"} +{"time":"2016","s1":"4032"} +{"time":"2017","s1":"4034"} +{"time":"2018","s1":"4036"} +{"time":"2019","s1":"4038"} +{"time":"2020","s1":"4040"} +{"time":"2021","s1":"4042"} +{"time":"2022","s1":"4044"} +{"time":"2023","s1":"4046"} +{"time":"2024","s1":"4048"} +{"time":"2025","s1":"4050"} +{"time":"2026","s1":"4052"} +{"time":"2027","s1":"4054"} +{"time":"2028","s1":"4056"} +{"time":"2029","s1":"4058"} +{"time":"2030","s1":"4060"} +{"time":"2031","s1":"4062"} +{"time":"2032","s1":"4064"} +{"time":"2033","s1":"4066"} +{"time":"2034","s1":"4068"} +{"time":"2035","s1":"4070"} +{"time":"2036","s1":"4072"} +{"time":"2037","s1":"4074"} +{"time":"2038","s1":"4076"} +{"time":"2039","s1":"4078"} +{"time":"2040","s1":"4080"} +{"time":"2041","s1":"4082"} +{"time":"2042","s1":"4084"} +{"time":"2043","s1":"4086"} +{"time":"2044","s1":"4088"} +{"time":"2045","s1":"4090"} +{"time":"2046","s1":"4092"} +{"time":"2047","s1":"4094"} +{"time":"2048","s1":"4096"} +{"time":"2049","s1":"4098"} +{"time":"2050","s1":"4100"} +{"time":"2051","s1":"4102"} +{"time":"2052","s1":"4104"} +{"time":"2053","s1":"4106"} +{"time":"2054","s1":"4108"} +{"time":"2055","s1":"4110"} +{"time":"2056","s1":"4112"} +{"time":"2057","s1":"4114"} +{"time":"2058","s1":"4116"} +{"time":"2059","s1":"4118"} +{"time":"2060","s1":"4120"} +{"time":"2061","s1":"4122"} +{"time":"2062","s1":"4124"} +{"time":"2063","s1":"4126"} +{"time":"2064","s1":"4128"} +{"time":"2065","s1":"4130"} +{"time":"2066","s1":"4132"} +{"time":"2067","s1":"4134"} +{"time":"2068","s1":"4136"} +{"time":"2069","s1":"4138"} +{"time":"2070","s1":"4140"} +{"time":"2071","s1":"4142"} +{"time":"2072","s1":"4144"} +{"time":"2073","s1":"4146"} +{"time":"2074","s1":"4148"} +{"time":"2075","s1":"4150"} +{"time":"2076","s1":"4152"} +{"time":"2077","s1":"4154"} +{"time":"2078","s1":"4156"} +{"time":"2079","s1":"4158"} +{"time":"2080","s1":"4160"} +{"time":"2081","s1":"4162"} +{"time":"2082","s1":"4164"} +{"time":"2083","s1":"4166"} +{"time":"2084","s1":"4168"} +{"time":"2085","s1":"4170"} +{"time":"2086","s1":"4172"} +{"time":"2087","s1":"4174"} +{"time":"2088","s1":"4176"} +{"time":"2089","s1":"4178"} +{"time":"2090","s1":"4180"} +{"time":"2091","s1":"4182"} +{"time":"2092","s1":"4184"} +{"time":"2093","s1":"4186"} +{"time":"2094","s1":"4188"} +{"time":"2095","s1":"4190"} +{"time":"2096","s1":"4192"} +{"time":"2097","s1":"4194"} +{"time":"2098","s1":"4196"} +{"time":"2099","s1":"4198"} +{"time":"2100","s1":"4200"} +{"time":"2101","s1":"4202"} +{"time":"2102","s1":"4204"} +{"time":"2103","s1":"4206"} +{"time":"2104","s1":"4208"} +{"time":"2105","s1":"4210"} +{"time":"2106","s1":"4212"} +{"time":"2107","s1":"4214"} +{"time":"2108","s1":"4216"} +{"time":"2109","s1":"4218"} +{"time":"2110","s1":"4220"} +{"time":"2111","s1":"4222"} +{"time":"2112","s1":"4224"} +{"time":"2113","s1":"4226"} +{"time":"2114","s1":"4228"} +{"time":"2115","s1":"4230"} +{"time":"2116","s1":"4232"} +{"time":"2117","s1":"4234"} +{"time":"2118","s1":"4236"} +{"time":"2119","s1":"4238"} +{"time":"2120","s1":"4240"} +{"time":"2121","s1":"4242"} +{"time":"2122","s1":"4244"} +{"time":"2123","s1":"4246"} +{"time":"2124","s1":"4248"} +{"time":"2125","s1":"4250"} +{"time":"2126","s1":"4252"} +{"time":"2127","s1":"4254"} +{"time":"2128","s1":"4256"} +{"time":"2129","s1":"4258"} +{"time":"2130","s1":"4260"} +{"time":"2131","s1":"4262"} +{"time":"2132","s1":"4264"} +{"time":"2133","s1":"4266"} +{"time":"2134","s1":"4268"} +{"time":"2135","s1":"4270"} +{"time":"2136","s1":"4272"} +{"time":"2137","s1":"4274"} +{"time":"2138","s1":"4276"} +{"time":"2139","s1":"4278"} +{"time":"2140","s1":"4280"} +{"time":"2141","s1":"4282"} +{"time":"2142","s1":"4284"} +{"time":"2143","s1":"4286"} +{"time":"2144","s1":"4288"} +{"time":"2145","s1":"4290"} +{"time":"2146","s1":"4292"} +{"time":"2147","s1":"4294"} +{"time":"2148","s1":"4296"} +{"time":"2149","s1":"4298"} +{"time":"2150","s1":"4300"} +{"time":"2151","s1":"4302"} +{"time":"2152","s1":"4304"} +{"time":"2153","s1":"4306"} +{"time":"2154","s1":"4308"} +{"time":"2155","s1":"4310"} +{"time":"2156","s1":"4312"} +{"time":"2157","s1":"4314"} +{"time":"2158","s1":"4316"} +{"time":"2159","s1":"4318"} +{"time":"2160","s1":"4320"} +{"time":"2161","s1":"4322"} +{"time":"2162","s1":"4324"} +{"time":"2163","s1":"4326"} +{"time":"2164","s1":"4328"} +{"time":"2165","s1":"4330"} +{"time":"2166","s1":"4332"} +{"time":"2167","s1":"4334"} +{"time":"2168","s1":"4336"} +{"time":"2169","s1":"4338"} +{"time":"2170","s1":"4340"} +{"time":"2171","s1":"4342"} +{"time":"2172","s1":"4344"} +{"time":"2173","s1":"4346"} +{"time":"2174","s1":"4348"} +{"time":"2175","s1":"4350"} +{"time":"2176","s1":"4352"} +{"time":"2177","s1":"4354"} +{"time":"2178","s1":"4356"} +{"time":"2179","s1":"4358"} +{"time":"2180","s1":"4360"} +{"time":"2181","s1":"4362"} +{"time":"2182","s1":"4364"} +{"time":"2183","s1":"4366"} +{"time":"2184","s1":"4368"} +{"time":"2185","s1":"4370"} +{"time":"2186","s1":"4372"} +{"time":"2187","s1":"4374"} +{"time":"2188","s1":"4376"} +{"time":"2189","s1":"4378"} +{"time":"2190","s1":"4380"} +{"time":"2191","s1":"4382"} +{"time":"2192","s1":"4384"} +{"time":"2193","s1":"4386"} +{"time":"2194","s1":"4388"} +{"time":"2195","s1":"4390"} +{"time":"2196","s1":"4392"} +{"time":"2197","s1":"4394"} +{"time":"2198","s1":"4396"} +{"time":"2199","s1":"4398"} +{"time":"2200","s1":"4400"} +{"time":"2201","s1":"4402"} +{"time":"2202","s1":"4404"} +{"time":"2203","s1":"4406"} +{"time":"2204","s1":"4408"} +{"time":"2205","s1":"4410"} +{"time":"2206","s1":"4412"} +{"time":"2207","s1":"4414"} +{"time":"2208","s1":"4416"} +{"time":"2209","s1":"4418"} +{"time":"2210","s1":"4420"} +{"time":"2211","s1":"4422"} +{"time":"2212","s1":"4424"} +{"time":"2213","s1":"4426"} +{"time":"2214","s1":"4428"} +{"time":"2215","s1":"4430"} +{"time":"2216","s1":"4432"} +{"time":"2217","s1":"4434"} +{"time":"2218","s1":"4436"} +{"time":"2219","s1":"4438"} +{"time":"2220","s1":"4440"} +{"time":"2221","s1":"4442"} +{"time":"2222","s1":"4444"} +{"time":"2223","s1":"4446"} +{"time":"2224","s1":"4448"} +{"time":"2225","s1":"4450"} +{"time":"2226","s1":"4452"} +{"time":"2227","s1":"4454"} +{"time":"2228","s1":"4456"} +{"time":"2229","s1":"4458"} +{"time":"2230","s1":"4460"} +{"time":"2231","s1":"4462"} +{"time":"2232","s1":"4464"} +{"time":"2233","s1":"4466"} +{"time":"2234","s1":"4468"} +{"time":"2235","s1":"4470"} +{"time":"2236","s1":"4472"} +{"time":"2237","s1":"4474"} +{"time":"2238","s1":"4476"} +{"time":"2239","s1":"4478"} +{"time":"2240","s1":"4480"} +{"time":"2241","s1":"4482"} +{"time":"2242","s1":"4484"} +{"time":"2243","s1":"4486"} +{"time":"2244","s1":"4488"} +{"time":"2245","s1":"4490"} +{"time":"2246","s1":"4492"} +{"time":"2247","s1":"4494"} +{"time":"2248","s1":"4496"} +{"time":"2249","s1":"4498"} +{"time":"2250","s1":"4500"} +{"time":"2251","s1":"4502"} +{"time":"2252","s1":"4504"} +{"time":"2253","s1":"4506"} +{"time":"2254","s1":"4508"} +{"time":"2255","s1":"4510"} +{"time":"2256","s1":"4512"} +{"time":"2257","s1":"4514"} +{"time":"2258","s1":"4516"} +{"time":"2259","s1":"4518"} +{"time":"2260","s1":"4520"} +{"time":"2261","s1":"4522"} +{"time":"2262","s1":"4524"} +{"time":"2263","s1":"4526"} +{"time":"2264","s1":"4528"} +{"time":"2265","s1":"4530"} +{"time":"2266","s1":"4532"} +{"time":"2267","s1":"4534"} +{"time":"2268","s1":"4536"} +{"time":"2269","s1":"4538"} +{"time":"2270","s1":"4540"} +{"time":"2271","s1":"4542"} +{"time":"2272","s1":"4544"} +{"time":"2273","s1":"4546"} +{"time":"2274","s1":"4548"} +{"time":"2275","s1":"4550"} +{"time":"2276","s1":"4552"} +{"time":"2277","s1":"4554"} +{"time":"2278","s1":"4556"} +{"time":"2279","s1":"4558"} +{"time":"2280","s1":"4560"} +{"time":"2281","s1":"4562"} +{"time":"2282","s1":"4564"} +{"time":"2283","s1":"4566"} +{"time":"2284","s1":"4568"} +{"time":"2285","s1":"4570"} +{"time":"2286","s1":"4572"} +{"time":"2287","s1":"4574"} +{"time":"2288","s1":"4576"} +{"time":"2289","s1":"4578"} +{"time":"2290","s1":"4580"} +{"time":"2291","s1":"4582"} +{"time":"2292","s1":"4584"} +{"time":"2293","s1":"4586"} +{"time":"2294","s1":"4588"} +{"time":"2295","s1":"4590"} +{"time":"2296","s1":"4592"} +{"time":"2297","s1":"4594"} +{"time":"2298","s1":"4596"} +{"time":"2299","s1":"4598"} +{"time":"2300","s1":"4600"} +{"time":"2301","s1":"4602"} +{"time":"2302","s1":"4604"} +{"time":"2303","s1":"4606"} +{"time":"2304","s1":"4608"} +{"time":"2305","s1":"4610"} +{"time":"2306","s1":"4612"} +{"time":"2307","s1":"4614"} +{"time":"2308","s1":"4616"} +{"time":"2309","s1":"4618"} +{"time":"2310","s1":"4620"} +{"time":"2311","s1":"4622"} +{"time":"2312","s1":"4624"} +{"time":"2313","s1":"4626"} +{"time":"2314","s1":"4628"} +{"time":"2315","s1":"4630"} +{"time":"2316","s1":"4632"} +{"time":"2317","s1":"4634"} +{"time":"2318","s1":"4636"} +{"time":"2319","s1":"4638"} +{"time":"2320","s1":"4640"} +{"time":"2321","s1":"4642"} +{"time":"2322","s1":"4644"} +{"time":"2323","s1":"4646"} +{"time":"2324","s1":"4648"} +{"time":"2325","s1":"4650"} +{"time":"2326","s1":"4652"} +{"time":"2327","s1":"4654"} +{"time":"2328","s1":"4656"} +{"time":"2329","s1":"4658"} +{"time":"2330","s1":"4660"} +{"time":"2331","s1":"4662"} +{"time":"2332","s1":"4664"} +{"time":"2333","s1":"4666"} +{"time":"2334","s1":"4668"} +{"time":"2335","s1":"4670"} +{"time":"2336","s1":"4672"} +{"time":"2337","s1":"4674"} +{"time":"2338","s1":"4676"} +{"time":"2339","s1":"4678"} +{"time":"2340","s1":"4680"} +{"time":"2341","s1":"4682"} +{"time":"2342","s1":"4684"} +{"time":"2343","s1":"4686"} +{"time":"2344","s1":"4688"} +{"time":"2345","s1":"4690"} +{"time":"2346","s1":"4692"} +{"time":"2347","s1":"4694"} +{"time":"2348","s1":"4696"} +{"time":"2349","s1":"4698"} +{"time":"2350","s1":"4700"} +{"time":"2351","s1":"4702"} +{"time":"2352","s1":"4704"} +{"time":"2353","s1":"4706"} +{"time":"2354","s1":"4708"} +{"time":"2355","s1":"4710"} +{"time":"2356","s1":"4712"} +{"time":"2357","s1":"4714"} +{"time":"2358","s1":"4716"} +{"time":"2359","s1":"4718"} +{"time":"2360","s1":"4720"} +{"time":"2361","s1":"4722"} +{"time":"2362","s1":"4724"} +{"time":"2363","s1":"4726"} +{"time":"2364","s1":"4728"} +{"time":"2365","s1":"4730"} +{"time":"2366","s1":"4732"} +{"time":"2367","s1":"4734"} +{"time":"2368","s1":"4736"} +{"time":"2369","s1":"4738"} +{"time":"2370","s1":"4740"} +{"time":"2371","s1":"4742"} +{"time":"2372","s1":"4744"} +{"time":"2373","s1":"4746"} +{"time":"2374","s1":"4748"} +{"time":"2375","s1":"4750"} +{"time":"2376","s1":"4752"} +{"time":"2377","s1":"4754"} +{"time":"2378","s1":"4756"} +{"time":"2379","s1":"4758"} +{"time":"2380","s1":"4760"} +{"time":"2381","s1":"4762"} +{"time":"2382","s1":"4764"} +{"time":"2383","s1":"4766"} +{"time":"2384","s1":"4768"} +{"time":"2385","s1":"4770"} +{"time":"2386","s1":"4772"} +{"time":"2387","s1":"4774"} +{"time":"2388","s1":"4776"} +{"time":"2389","s1":"4778"} +{"time":"2390","s1":"4780"} +{"time":"2391","s1":"4782"} +{"time":"2392","s1":"4784"} +{"time":"2393","s1":"4786"} +{"time":"2394","s1":"4788"} +{"time":"2395","s1":"4790"} +{"time":"2396","s1":"4792"} +{"time":"2397","s1":"4794"} +{"time":"2398","s1":"4796"} +{"time":"2399","s1":"4798"} +{"time":"2400","s1":"4800"} +{"time":"2401","s1":"4802"} +{"time":"2402","s1":"4804"} +{"time":"2403","s1":"4806"} +{"time":"2404","s1":"4808"} +{"time":"2405","s1":"4810"} +{"time":"2406","s1":"4812"} +{"time":"2407","s1":"4814"} +{"time":"2408","s1":"4816"} +{"time":"2409","s1":"4818"} +{"time":"2410","s1":"4820"} +{"time":"2411","s1":"4822"} +{"time":"2412","s1":"4824"} +{"time":"2413","s1":"4826"} +{"time":"2414","s1":"4828"} +{"time":"2415","s1":"4830"} +{"time":"2416","s1":"4832"} +{"time":"2417","s1":"4834"} +{"time":"2418","s1":"4836"} +{"time":"2419","s1":"4838"} +{"time":"2420","s1":"4840"} +{"time":"2421","s1":"4842"} +{"time":"2422","s1":"4844"} +{"time":"2423","s1":"4846"} +{"time":"2424","s1":"4848"} +{"time":"2425","s1":"4850"} +{"time":"2426","s1":"4852"} +{"time":"2427","s1":"4854"} +{"time":"2428","s1":"4856"} +{"time":"2429","s1":"4858"} +{"time":"2430","s1":"4860"} +{"time":"2431","s1":"4862"} +{"time":"2432","s1":"4864"} +{"time":"2433","s1":"4866"} +{"time":"2434","s1":"4868"} +{"time":"2435","s1":"4870"} +{"time":"2436","s1":"4872"} +{"time":"2437","s1":"4874"} +{"time":"2438","s1":"4876"} +{"time":"2439","s1":"4878"} +{"time":"2440","s1":"4880"} +{"time":"2441","s1":"4882"} +{"time":"2442","s1":"4884"} +{"time":"2443","s1":"4886"} +{"time":"2444","s1":"4888"} +{"time":"2445","s1":"4890"} +{"time":"2446","s1":"4892"} +{"time":"2447","s1":"4894"} +{"time":"2448","s1":"4896"} +{"time":"2449","s1":"4898"} +{"time":"2450","s1":"4900"} +{"time":"2451","s1":"4902"} +{"time":"2452","s1":"4904"} +{"time":"2453","s1":"4906"} +{"time":"2454","s1":"4908"} +{"time":"2455","s1":"4910"} +{"time":"2456","s1":"4912"} +{"time":"2457","s1":"4914"} +{"time":"2458","s1":"4916"} +{"time":"2459","s1":"4918"} +{"time":"2460","s1":"4920"} +{"time":"2461","s1":"4922"} +{"time":"2462","s1":"4924"} +{"time":"2463","s1":"4926"} +{"time":"2464","s1":"4928"} +{"time":"2465","s1":"4930"} +{"time":"2466","s1":"4932"} +{"time":"2467","s1":"4934"} +{"time":"2468","s1":"4936"} +{"time":"2469","s1":"4938"} +{"time":"2470","s1":"4940"} +{"time":"2471","s1":"4942"} +{"time":"2472","s1":"4944"} +{"time":"2473","s1":"4946"} +{"time":"2474","s1":"4948"} +{"time":"2475","s1":"4950"} +{"time":"2476","s1":"4952"} +{"time":"2477","s1":"4954"} +{"time":"2478","s1":"4956"} +{"time":"2479","s1":"4958"} +{"time":"2480","s1":"4960"} +{"time":"2481","s1":"4962"} +{"time":"2482","s1":"4964"} +{"time":"2483","s1":"4966"} +{"time":"2484","s1":"4968"} +{"time":"2485","s1":"4970"} +{"time":"2486","s1":"4972"} +{"time":"2487","s1":"4974"} +{"time":"2488","s1":"4976"} +{"time":"2489","s1":"4978"} +{"time":"2490","s1":"4980"} +{"time":"2491","s1":"4982"} +{"time":"2492","s1":"4984"} +{"time":"2493","s1":"4986"} +{"time":"2494","s1":"4988"} +{"time":"2495","s1":"4990"} +{"time":"2496","s1":"4992"} +{"time":"2497","s1":"4994"} +{"time":"2498","s1":"4996"} +{"time":"2499","s1":"4998"} +{"time":"2500","s1":"5000"} +{"time":"2501","s1":"5002"} +{"time":"2502","s1":"5004"} +{"time":"2503","s1":"5006"} +{"time":"2504","s1":"5008"} +{"time":"2505","s1":"5010"} +{"time":"2506","s1":"5012"} +{"time":"2507","s1":"5014"} +{"time":"2508","s1":"5016"} +{"time":"2509","s1":"5018"} +{"time":"2510","s1":"5020"} +{"time":"2511","s1":"5022"} +{"time":"2512","s1":"5024"} +{"time":"2513","s1":"5026"} +{"time":"2514","s1":"5028"} +{"time":"2515","s1":"5030"} +{"time":"2516","s1":"5032"} +{"time":"2517","s1":"5034"} +{"time":"2518","s1":"5036"} +{"time":"2519","s1":"5038"} +{"time":"2520","s1":"5040"} +{"time":"2521","s1":"5042"} +{"time":"2522","s1":"5044"} +{"time":"2523","s1":"5046"} +{"time":"2524","s1":"5048"} +{"time":"2525","s1":"5050"} +{"time":"2526","s1":"5052"} +{"time":"2527","s1":"5054"} +{"time":"2528","s1":"5056"} +{"time":"2529","s1":"5058"} +{"time":"2530","s1":"5060"} +{"time":"2531","s1":"5062"} +{"time":"2532","s1":"5064"} +{"time":"2533","s1":"5066"} +{"time":"2534","s1":"5068"} +{"time":"2535","s1":"5070"} +{"time":"2536","s1":"5072"} +{"time":"2537","s1":"5074"} +{"time":"2538","s1":"5076"} +{"time":"2539","s1":"5078"} +{"time":"2540","s1":"5080"} +{"time":"2541","s1":"5082"} +{"time":"2542","s1":"5084"} +{"time":"2543","s1":"5086"} +{"time":"2544","s1":"5088"} +{"time":"2545","s1":"5090"} +{"time":"2546","s1":"5092"} +{"time":"2547","s1":"5094"} +{"time":"2548","s1":"5096"} +{"time":"2549","s1":"5098"} +{"time":"2550","s1":"5100"} +{"time":"2551","s1":"5102"} +{"time":"2552","s1":"5104"} +{"time":"2553","s1":"5106"} +{"time":"2554","s1":"5108"} +{"time":"2555","s1":"5110"} +{"time":"2556","s1":"5112"} +{"time":"2557","s1":"5114"} +{"time":"2558","s1":"5116"} +{"time":"2559","s1":"5118"} +{"time":"2560","s1":"5120"} +{"time":"2561","s1":"5122"} +{"time":"2562","s1":"5124"} +{"time":"2563","s1":"5126"} +{"time":"2564","s1":"5128"} +{"time":"2565","s1":"5130"} +{"time":"2566","s1":"5132"} +{"time":"2567","s1":"5134"} +{"time":"2568","s1":"5136"} +{"time":"2569","s1":"5138"} +{"time":"2570","s1":"5140"} +{"time":"2571","s1":"5142"} +{"time":"2572","s1":"5144"} +{"time":"2573","s1":"5146"} +{"time":"2574","s1":"5148"} +{"time":"2575","s1":"5150"} +{"time":"2576","s1":"5152"} +{"time":"2577","s1":"5154"} +{"time":"2578","s1":"5156"} +{"time":"2579","s1":"5158"} +{"time":"2580","s1":"5160"} +{"time":"2581","s1":"5162"} +{"time":"2582","s1":"5164"} +{"time":"2583","s1":"5166"} +{"time":"2584","s1":"5168"} +{"time":"2585","s1":"5170"} +{"time":"2586","s1":"5172"} +{"time":"2587","s1":"5174"} +{"time":"2588","s1":"5176"} +{"time":"2589","s1":"5178"} +{"time":"2590","s1":"5180"} +{"time":"2591","s1":"5182"} +{"time":"2592","s1":"5184"} +{"time":"2593","s1":"5186"} +{"time":"2594","s1":"5188"} +{"time":"2595","s1":"5190"} +{"time":"2596","s1":"5192"} +{"time":"2597","s1":"5194"} +{"time":"2598","s1":"5196"} +{"time":"2599","s1":"5198"} +{"time":"2600","s1":"5200"} +{"time":"2601","s1":"5202"} +{"time":"2602","s1":"5204"} +{"time":"2603","s1":"5206"} +{"time":"2604","s1":"5208"} +{"time":"2605","s1":"5210"} +{"time":"2606","s1":"5212"} +{"time":"2607","s1":"5214"} +{"time":"2608","s1":"5216"} +{"time":"2609","s1":"5218"} +{"time":"2610","s1":"5220"} +{"time":"2611","s1":"5222"} +{"time":"2612","s1":"5224"} +{"time":"2613","s1":"5226"} +{"time":"2614","s1":"5228"} +{"time":"2615","s1":"5230"} +{"time":"2616","s1":"5232"} +{"time":"2617","s1":"5234"} +{"time":"2618","s1":"5236"} +{"time":"2619","s1":"5238"} +{"time":"2620","s1":"5240"} +{"time":"2621","s1":"5242"} +{"time":"2622","s1":"5244"} +{"time":"2623","s1":"5246"} +{"time":"2624","s1":"5248"} +{"time":"2625","s1":"5250"} +{"time":"2626","s1":"5252"} +{"time":"2627","s1":"5254"} +{"time":"2628","s1":"5256"} +{"time":"2629","s1":"5258"} +{"time":"2630","s1":"5260"} +{"time":"2631","s1":"5262"} +{"time":"2632","s1":"5264"} +{"time":"2633","s1":"5266"} +{"time":"2634","s1":"5268"} +{"time":"2635","s1":"5270"} +{"time":"2636","s1":"5272"} +{"time":"2637","s1":"5274"} +{"time":"2638","s1":"5276"} +{"time":"2639","s1":"5278"} +{"time":"2640","s1":"5280"} +{"time":"2641","s1":"5282"} +{"time":"2642","s1":"5284"} +{"time":"2643","s1":"5286"} +{"time":"2644","s1":"5288"} +{"time":"2645","s1":"5290"} +{"time":"2646","s1":"5292"} +{"time":"2647","s1":"5294"} +{"time":"2648","s1":"5296"} +{"time":"2649","s1":"5298"} +{"time":"2650","s1":"5300"} +{"time":"2651","s1":"5302"} +{"time":"2652","s1":"5304"} +{"time":"2653","s1":"5306"} +{"time":"2654","s1":"5308"} +{"time":"2655","s1":"5310"} +{"time":"2656","s1":"5312"} +{"time":"2657","s1":"5314"} +{"time":"2658","s1":"5316"} +{"time":"2659","s1":"5318"} +{"time":"2660","s1":"5320"} +{"time":"2661","s1":"5322"} +{"time":"2662","s1":"5324"} +{"time":"2663","s1":"5326"} +{"time":"2664","s1":"5328"} +{"time":"2665","s1":"5330"} +{"time":"2666","s1":"5332"} +{"time":"2667","s1":"5334"} +{"time":"2668","s1":"5336"} +{"time":"2669","s1":"5338"} +{"time":"2670","s1":"5340"} +{"time":"2671","s1":"5342"} +{"time":"2672","s1":"5344"} +{"time":"2673","s1":"5346"} +{"time":"2674","s1":"5348"} +{"time":"2675","s1":"5350"} +{"time":"2676","s1":"5352"} +{"time":"2677","s1":"5354"} +{"time":"2678","s1":"5356"} +{"time":"2679","s1":"5358"} +{"time":"2680","s1":"5360"} +{"time":"2681","s1":"5362"} +{"time":"2682","s1":"5364"} +{"time":"2683","s1":"5366"} +{"time":"2684","s1":"5368"} +{"time":"2685","s1":"5370"} +{"time":"2686","s1":"5372"} +{"time":"2687","s1":"5374"} +{"time":"2688","s1":"5376"} +{"time":"2689","s1":"5378"} +{"time":"2690","s1":"5380"} +{"time":"2691","s1":"5382"} +{"time":"2692","s1":"5384"} +{"time":"2693","s1":"5386"} +{"time":"2694","s1":"5388"} +{"time":"2695","s1":"5390"} +{"time":"2696","s1":"5392"} +{"time":"2697","s1":"5394"} +{"time":"2698","s1":"5396"} +{"time":"2699","s1":"5398"} +{"time":"2700","s1":"5400"} +{"time":"2701","s1":"5402"} +{"time":"2702","s1":"5404"} +{"time":"2703","s1":"5406"} +{"time":"2704","s1":"5408"} +{"time":"2705","s1":"5410"} +{"time":"2706","s1":"5412"} +{"time":"2707","s1":"5414"} +{"time":"2708","s1":"5416"} +{"time":"2709","s1":"5418"} +{"time":"2710","s1":"5420"} +{"time":"2711","s1":"5422"} +{"time":"2712","s1":"5424"} +{"time":"2713","s1":"5426"} +{"time":"2714","s1":"5428"} +{"time":"2715","s1":"5430"} +{"time":"2716","s1":"5432"} +{"time":"2717","s1":"5434"} +{"time":"2718","s1":"5436"} +{"time":"2719","s1":"5438"} +{"time":"2720","s1":"5440"} +{"time":"2721","s1":"5442"} +{"time":"2722","s1":"5444"} +{"time":"2723","s1":"5446"} +{"time":"2724","s1":"5448"} +{"time":"2725","s1":"5450"} +{"time":"2726","s1":"5452"} +{"time":"2727","s1":"5454"} +{"time":"2728","s1":"5456"} +{"time":"2729","s1":"5458"} +{"time":"2730","s1":"5460"} +{"time":"2731","s1":"5462"} +{"time":"2732","s1":"5464"} +{"time":"2733","s1":"5466"} +{"time":"2734","s1":"5468"} +{"time":"2735","s1":"5470"} +{"time":"2736","s1":"5472"} +{"time":"2737","s1":"5474"} +{"time":"2738","s1":"5476"} +{"time":"2739","s1":"5478"} +{"time":"2740","s1":"5480"} +{"time":"2741","s1":"5482"} +{"time":"2742","s1":"5484"} +{"time":"2743","s1":"5486"} +{"time":"2744","s1":"5488"} +{"time":"2745","s1":"5490"} +{"time":"2746","s1":"5492"} +{"time":"2747","s1":"5494"} +{"time":"2748","s1":"5496"} +{"time":"2749","s1":"5498"} +{"time":"2750","s1":"5500"} +{"time":"2751","s1":"5502"} +{"time":"2752","s1":"5504"} +{"time":"2753","s1":"5506"} +{"time":"2754","s1":"5508"} +{"time":"2755","s1":"5510"} +{"time":"2756","s1":"5512"} +{"time":"2757","s1":"5514"} +{"time":"2758","s1":"5516"} +{"time":"2759","s1":"5518"} +{"time":"2760","s1":"5520"} +{"time":"2761","s1":"5522"} +{"time":"2762","s1":"5524"} +{"time":"2763","s1":"5526"} +{"time":"2764","s1":"5528"} +{"time":"2765","s1":"5530"} +{"time":"2766","s1":"5532"} +{"time":"2767","s1":"5534"} +{"time":"2768","s1":"5536"} +{"time":"2769","s1":"5538"} +{"time":"2770","s1":"5540"} +{"time":"2771","s1":"5542"} +{"time":"2772","s1":"5544"} +{"time":"2773","s1":"5546"} +{"time":"2774","s1":"5548"} +{"time":"2775","s1":"5550"} +{"time":"2776","s1":"5552"} +{"time":"2777","s1":"5554"} +{"time":"2778","s1":"5556"} +{"time":"2779","s1":"5558"} +{"time":"2780","s1":"5560"} +{"time":"2781","s1":"5562"} +{"time":"2782","s1":"5564"} +{"time":"2783","s1":"5566"} +{"time":"2784","s1":"5568"} +{"time":"2785","s1":"5570"} +{"time":"2786","s1":"5572"} +{"time":"2787","s1":"5574"} +{"time":"2788","s1":"5576"} +{"time":"2789","s1":"5578"} +{"time":"2790","s1":"5580"} +{"time":"2791","s1":"5582"} +{"time":"2792","s1":"5584"} +{"time":"2793","s1":"5586"} +{"time":"2794","s1":"5588"} +{"time":"2795","s1":"5590"} +{"time":"2796","s1":"5592"} +{"time":"2797","s1":"5594"} +{"time":"2798","s1":"5596"} +{"time":"2799","s1":"5598"} +{"time":"2800","s1":"5600"} +{"time":"2801","s1":"5602"} +{"time":"2802","s1":"5604"} +{"time":"2803","s1":"5606"} +{"time":"2804","s1":"5608"} +{"time":"2805","s1":"5610"} +{"time":"2806","s1":"5612"} +{"time":"2807","s1":"5614"} +{"time":"2808","s1":"5616"} +{"time":"2809","s1":"5618"} +{"time":"2810","s1":"5620"} +{"time":"2811","s1":"5622"} +{"time":"2812","s1":"5624"} +{"time":"2813","s1":"5626"} +{"time":"2814","s1":"5628"} +{"time":"2815","s1":"5630"} +{"time":"2816","s1":"5632"} +{"time":"2817","s1":"5634"} +{"time":"2818","s1":"5636"} +{"time":"2819","s1":"5638"} +{"time":"2820","s1":"5640"} +{"time":"2821","s1":"5642"} +{"time":"2822","s1":"5644"} +{"time":"2823","s1":"5646"} +{"time":"2824","s1":"5648"} +{"time":"2825","s1":"5650"} +{"time":"2826","s1":"5652"} +{"time":"2827","s1":"5654"} +{"time":"2828","s1":"5656"} +{"time":"2829","s1":"5658"} +{"time":"2830","s1":"5660"} +{"time":"2831","s1":"5662"} +{"time":"2832","s1":"5664"} +{"time":"2833","s1":"5666"} +{"time":"2834","s1":"5668"} +{"time":"2835","s1":"5670"} +{"time":"2836","s1":"5672"} +{"time":"2837","s1":"5674"} +{"time":"2838","s1":"5676"} +{"time":"2839","s1":"5678"} +{"time":"2840","s1":"5680"} +{"time":"2841","s1":"5682"} +{"time":"2842","s1":"5684"} +{"time":"2843","s1":"5686"} +{"time":"2844","s1":"5688"} +{"time":"2845","s1":"5690"} +{"time":"2846","s1":"5692"} +{"time":"2847","s1":"5694"} +{"time":"2848","s1":"5696"} +{"time":"2849","s1":"5698"} +{"time":"2850","s1":"5700"} +{"time":"2851","s1":"5702"} +{"time":"2852","s1":"5704"} +{"time":"2853","s1":"5706"} +{"time":"2854","s1":"5708"} +{"time":"2855","s1":"5710"} +{"time":"2856","s1":"5712"} +{"time":"2857","s1":"5714"} +{"time":"2858","s1":"5716"} +{"time":"2859","s1":"5718"} +{"time":"2860","s1":"5720"} +{"time":"2861","s1":"5722"} +{"time":"2862","s1":"5724"} +{"time":"2863","s1":"5726"} +{"time":"2864","s1":"5728"} +{"time":"2865","s1":"5730"} +{"time":"2866","s1":"5732"} +{"time":"2867","s1":"5734"} +{"time":"2868","s1":"5736"} +{"time":"2869","s1":"5738"} +{"time":"2870","s1":"5740"} +{"time":"2871","s1":"5742"} +{"time":"2872","s1":"5744"} +{"time":"2873","s1":"5746"} +{"time":"2874","s1":"5748"} +{"time":"2875","s1":"5750"} +{"time":"2876","s1":"5752"} +{"time":"2877","s1":"5754"} +{"time":"2878","s1":"5756"} +{"time":"2879","s1":"5758"} +{"time":"2880","s1":"5760"} +{"time":"2881","s1":"5762"} +{"time":"2882","s1":"5764"} +{"time":"2883","s1":"5766"} +{"time":"2884","s1":"5768"} +{"time":"2885","s1":"5770"} +{"time":"2886","s1":"5772"} +{"time":"2887","s1":"5774"} +{"time":"2888","s1":"5776"} +{"time":"2889","s1":"5778"} +{"time":"2890","s1":"5780"} +{"time":"2891","s1":"5782"} +{"time":"2892","s1":"5784"} +{"time":"2893","s1":"5786"} +{"time":"2894","s1":"5788"} +{"time":"2895","s1":"5790"} +{"time":"2896","s1":"5792"} +{"time":"2897","s1":"5794"} +{"time":"2898","s1":"5796"} +{"time":"2899","s1":"5798"} +{"time":"2900","s1":"5800"} +{"time":"2901","s1":"5802"} +{"time":"2902","s1":"5804"} +{"time":"2903","s1":"5806"} +{"time":"2904","s1":"5808"} +{"time":"2905","s1":"5810"} +{"time":"2906","s1":"5812"} +{"time":"2907","s1":"5814"} +{"time":"2908","s1":"5816"} +{"time":"2909","s1":"5818"} +{"time":"2910","s1":"5820"} +{"time":"2911","s1":"5822"} +{"time":"2912","s1":"5824"} +{"time":"2913","s1":"5826"} +{"time":"2914","s1":"5828"} +{"time":"2915","s1":"5830"} +{"time":"2916","s1":"5832"} +{"time":"2917","s1":"5834"} +{"time":"2918","s1":"5836"} +{"time":"2919","s1":"5838"} +{"time":"2920","s1":"5840"} +{"time":"2921","s1":"5842"} +{"time":"2922","s1":"5844"} +{"time":"2923","s1":"5846"} +{"time":"2924","s1":"5848"} +{"time":"2925","s1":"5850"} +{"time":"2926","s1":"5852"} +{"time":"2927","s1":"5854"} +{"time":"2928","s1":"5856"} +{"time":"2929","s1":"5858"} +{"time":"2930","s1":"5860"} +{"time":"2931","s1":"5862"} +{"time":"2932","s1":"5864"} +{"time":"2933","s1":"5866"} +{"time":"2934","s1":"5868"} +{"time":"2935","s1":"5870"} +{"time":"2936","s1":"5872"} +{"time":"2937","s1":"5874"} +{"time":"2938","s1":"5876"} +{"time":"2939","s1":"5878"} +{"time":"2940","s1":"5880"} +{"time":"2941","s1":"5882"} +{"time":"2942","s1":"5884"} +{"time":"2943","s1":"5886"} +{"time":"2944","s1":"5888"} +{"time":"2945","s1":"5890"} +{"time":"2946","s1":"5892"} +{"time":"2947","s1":"5894"} +{"time":"2948","s1":"5896"} +{"time":"2949","s1":"5898"} +{"time":"2950","s1":"5900"} +{"time":"2951","s1":"5902"} +{"time":"2952","s1":"5904"} +{"time":"2953","s1":"5906"} +{"time":"2954","s1":"5908"} +{"time":"2955","s1":"5910"} +{"time":"2956","s1":"5912"} +{"time":"2957","s1":"5914"} +{"time":"2958","s1":"5916"} +{"time":"2959","s1":"5918"} +{"time":"2960","s1":"5920"} +{"time":"2961","s1":"5922"} +{"time":"2962","s1":"5924"} +{"time":"2963","s1":"5926"} +{"time":"2964","s1":"5928"} +{"time":"2965","s1":"5930"} +{"time":"2966","s1":"5932"} +{"time":"2967","s1":"5934"} +{"time":"2968","s1":"5936"} +{"time":"2969","s1":"5938"} +{"time":"2970","s1":"5940"} +{"time":"2971","s1":"5942"} +{"time":"2972","s1":"5944"} +{"time":"2973","s1":"5946"} +{"time":"2974","s1":"5948"} +{"time":"2975","s1":"5950"} +{"time":"2976","s1":"5952"} +{"time":"2977","s1":"5954"} +{"time":"2978","s1":"5956"} +{"time":"2979","s1":"5958"} +{"time":"2980","s1":"5960"} +{"time":"2981","s1":"5962"} +{"time":"2982","s1":"5964"} +{"time":"2983","s1":"5966"} +{"time":"2984","s1":"5968"} +{"time":"2985","s1":"5970"} +{"time":"2986","s1":"5972"} +{"time":"2987","s1":"5974"} +{"time":"2988","s1":"5976"} +{"time":"2989","s1":"5978"} +{"time":"2990","s1":"5980"} +{"time":"2991","s1":"5982"} +{"time":"2992","s1":"5984"} +{"time":"2993","s1":"5986"} +{"time":"2994","s1":"5988"} +{"time":"2995","s1":"5990"} +{"time":"2996","s1":"5992"} +{"time":"2997","s1":"5994"} +{"time":"2998","s1":"5996"} +{"time":"2999","s1":"5998"} +{"time":"3000","s1":"6000"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/003.stdout.txt new file mode 100644 index 000000000..109f1babf --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/003.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,big,s1,FIELD,3000,1,3000,0,1,3000,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadFloatDoubleRoundTripLossless/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadFloatDoubleRoundTripLossless/002.roundtrip.txt new file mode 100644 index 000000000..6e4d75e83 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadFloatDoubleRoundTripLossless/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"0","id1":"dev","f1":0.100000001,"d1":0.10000000000000001} +{"time":"1","id1":"dev","f1":3.40282345,"d1":3.1415926535897931} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/002.roundtrip.txt new file mode 100644 index 000000000..a8195a7fb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/002.roundtrip.txt @@ -0,0 +1,3 @@ +{"time":"0","id1":"dev","s1":"0"} +{"time":"1","id1":"dev","s1":"10"} +{"time":"2","id1":"dev","s1":"20"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/003.stdout.txt new file mode 100644 index 000000000..14314e9f6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/003.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,t1,id1,TAG,3,1,3,0,0,2,scan +table,t1,s1,FIELD,3,1,3,0,0,2,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/004.stdout.txt new file mode 100644 index 000000000..a1b069a20 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/004.stdout.txt @@ -0,0 +1,4 @@ +time,id1,s1 +0,dev,0 +1,dev,10 +2,dev,20 diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteVerboseEchoesConfig/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteVerboseEchoesConfig/001.stderr.txt new file mode 100644 index 000000000..057d6ab37 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.WriteVerboseEchoesConfig/001.stderr.txt @@ -0,0 +1,2 @@ +created model=table object=vt rows=1 output=tsfile_cli_vb_out_309.tsfile +column=s1 category=FIELD data_type=INT64 encoding=TS_2DIFF source=default compression=LZ4 source=default diff --git a/cpp/test/tools/e2e/golden/e2e/CliE2E.ZeroLimitUsesEachFormatsZeroRowContract/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliE2E.ZeroLimitUsesEachFormatsZeroRowContract/003.stdout.txt new file mode 100644 index 000000000..dfc11f3ef --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliE2E.ZeroLimitUsesEachFormatsZeroRowContract/003.stdout.txt @@ -0,0 +1 @@ +time id1 id2 s1 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/001.stdout.txt new file mode 100644 index 000000000..d448e59df --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/001.stdout.txt @@ -0,0 +1,7 @@ +Usage: tsfile-cli ls [-f|--format table|ndjson|csv] +Lists every object in the selected tree or table model. +Result fields: model,object +Default: --format table +Examples: + tsfile-cli ls data.tsfile + tsfile-cli ls -f ndjson data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/002.stdout.txt new file mode 100644 index 000000000..2ca5b54bf --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/002.stdout.txt @@ -0,0 +1,7 @@ +Usage: tsfile-cli schema [-d|--device | -t|--table ] [-m|--measurements ]... [-f|--format table|ndjson|csv] +Shows TIME/TAG/ATTRIBUTE/FIELD structure and physical settings. +Result fields: model,object,column,category,data_type,encoding,compression +Default: --format table; omitted scope visits every object in file order. +Examples: + tsfile-cli schema -t sensors -f csv data.tsfile + tsfile-cli schema -d root.sg.d1 -m temperature data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/003.stdout.txt new file mode 100644 index 000000000..faaeaa9a0 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/003.stdout.txt @@ -0,0 +1,7 @@ +Usage: tsfile-cli meta [-f|--format table|ndjson|csv] +Shows file-level metadata and the selected data model. +Result fields: size_bytes,format_version,model +Default: --format table +Examples: + tsfile-cli meta data.tsfile + tsfile-cli meta -f ndjson data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/004.stdout.txt new file mode 100644 index 000000000..bbe0b7834 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/004.stdout.txt @@ -0,0 +1,6 @@ +Usage: tsfile-cli stats [-d|--device | -t|--table
] [-m|--measurements ]... [-f|--format table|ndjson|csv] +Shows FIELD value statistics and null counts. +Result fields: tree uses model,object,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source; table inserts tag. fields after object. +Default: --format table; omitted scope visits every object in file order. +Examples: + tsfile-cli stats -t sensors -m temperature -f csv data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/005.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/005.stdout.txt new file mode 100644 index 000000000..ade999ebd --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/005.stdout.txt @@ -0,0 +1,6 @@ +Usage: tsfile-cli count [-d|--device | -t|--table
] [-m|--measurements ]... [-f|--format table|ndjson|csv] +Shows logical row, entity, and column counts. +Result fields: model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +Default: --format table; omitted scope visits every object in file order. +Examples: + tsfile-cli count -t sensors -m site -f csv data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/006.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/006.stdout.txt new file mode 100644 index 000000000..136cfbf29 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/006.stdout.txt @@ -0,0 +1,7 @@ +Usage: tsfile-cli sketch [-o|--output ] [--force] +Writes the physical layout text from the bound printSketch behavior. +Result fields: printSketch text; --format is not supported. +Default: stdout; --force requires --output and replaces only a regular file. +Examples: + tsfile-cli sketch data.tsfile + tsfile-cli sketch -o layout.txt data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/007.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/007.stdout.txt new file mode 100644 index 000000000..2780601ed --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/007.stdout.txt @@ -0,0 +1,6 @@ +Usage: tsfile-cli head [-d|--device | -t|--table
] [-m|--measurements ]... [--start ] [--end ] [--offset N] [-n|--limit N] [--tag-filter [value]] [--tag-match all|any] [-f|--format table|ndjson|csv] +Reads the first matching rows from one object. +Result fields: time, all table TAG columns, selected FIELD columns. +Default: --limit 10, --offset 0, --format table. +Examples: + tsfile-cli head -t sensors -m temperature -n 5 data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/008.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/008.stdout.txt new file mode 100644 index 000000000..f46231bec --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/008.stdout.txt @@ -0,0 +1,6 @@ +Usage: tsfile-cli cat [-d|--device | -t|--table
] [-m|--measurements ]... [--start ] [--end ] [--offset N] [-n|--limit N] [--tag-filter [value]] [--tag-match all|any] [-f|--format table|ndjson|csv] +Reads all matching rows from one object unless --limit is set. +Result fields: time, all table TAG columns, selected FIELD columns. +Default: no row limit, --offset 0, --format table. +Examples: + tsfile-cli cat -t sensors --tag-filter site eq a -f ndjson data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/009.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/009.stdout.txt new file mode 100644 index 000000000..7f7c66b78 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/009.stdout.txt @@ -0,0 +1,7 @@ +Usage: tsfile-cli export (-d|--device | -t|--table
) -o|--output --type table|ndjson|csv [query options] [--force] + tsfile-cli export (-d ... | -t
...) --output-dir --type table|ndjson|csv [query options] +Writes one object atomically, or a numbered multi-object directory with _manifest.json. +Result fields: same bytes as cat for the same scope and type; multi-object manifest records file,model,object,type,rows. +Default: no row limit, --offset 0; --type is required. +Examples: + tsfile-cli export -t sensors --type csv -o sensors.csv data.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/010.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/010.stdout.txt new file mode 100644 index 000000000..f4b519988 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/010.stdout.txt @@ -0,0 +1,10 @@ +Usage: tsfile-cli write --table (--tag STRING)* (--field )+ [--encoding ] [--compression ] (-i|--input | --stdin) -o|--output [-v|--verbose] +Creates a new single-table, table-model TsFile from strict CSV. +Result fields: none on stdout; -v writes a post-commit summary and resolved column physical settings to stderr. +Default: success is silent; target must not exist; CSV header must contain time and declared TAG/FIELD names. +CSV values: unquoted \N is NULL; "" is an empty string. +STRING/TEXT: prepend one extra \ to values starting with \, including inside quoted cells. +write removes exactly one leading \ from STRING/TEXT cells starting with \\; backslashes elsewhere are unchanged. +CSV examples: \\N -> literal \N; \\path -> \path; \\\path -> \\path. +Examples: + tsfile-cli write --table sensors --tag site STRING --field temperature DOUBLE -i input.csv -o out.tsfile diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/001.stderr.txt new file mode 100644 index 000000000..d28fb143c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --format specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/002.stderr.txt new file mode 100644 index 000000000..0ce3baf5c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/002.stderr.txt @@ -0,0 +1,27 @@ +Error: --limit specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/003.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/003.stderr.txt new file mode 100644 index 000000000..1b7e30f23 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/003.stderr.txt @@ -0,0 +1,27 @@ +Error: --offset specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/004.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/004.stderr.txt new file mode 100644 index 000000000..ab9b4900f --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/004.stderr.txt @@ -0,0 +1,27 @@ +Error: --start specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/005.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/005.stderr.txt new file mode 100644 index 000000000..ff2e87c22 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/005.stderr.txt @@ -0,0 +1,27 @@ +Error: --end specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/006.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/006.stderr.txt new file mode 100644 index 000000000..4ff119f82 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/006.stderr.txt @@ -0,0 +1,27 @@ +Error: --output specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/007.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/007.stderr.txt new file mode 100644 index 000000000..249f68f5f --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/007.stderr.txt @@ -0,0 +1,27 @@ +Error: --output-dir specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/008.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/008.stderr.txt new file mode 100644 index 000000000..18f3765b5 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/008.stderr.txt @@ -0,0 +1,27 @@ +Error: --force specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/001.stderr.txt new file mode 100644 index 000000000..a262ba6f6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/001.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_export_link_208.csv' must not be a symbolic link diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/002.stderr.txt new file mode 100644 index 000000000..29c585034 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/002.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_export_fifo_209.csv' is not a regular file diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0001.csv.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0001.csv.txt new file mode 100644 index 000000000..eac41d4fc --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0001.csv.txt @@ -0,0 +1,2 @@ +time,id1,s1 +0,sensors_a_tag,10 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0002.csv.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0002.csv.txt new file mode 100644 index 000000000..99f1bfe10 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0002.csv.txt @@ -0,0 +1,2 @@ +time,id1,s1 +0,sensors_b_tag,20 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001._manifest.json.txt new file mode 100644 index 000000000..cfd80d964 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.csv","model":"table","object":"sensors_a","type":"csv","rows":"1"}, + {"file":"0002.csv","model":"table","object":"sensors_b","type":"csv","rows":"1"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt new file mode 100644 index 000000000..277145f22 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt @@ -0,0 +1,6 @@ +time,id1,id2,s1 +0,id1_field_1,id2_field_2,0 +1,id1_field_1,id2_field_2,10 +2,id1_field_1,id2_field_2,20 +3,id1_field_1,id2_field_2,30 +4,id1_field_1,id2_field_2,40 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/001.stdout.txt new file mode 100644 index 000000000..e85784d04 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/001.stdout.txt @@ -0,0 +1 @@ +{"time":"0","id1":"id1_field_1","id2":"id2_field_2","s1":"0"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/002.stderr.txt new file mode 100644 index 000000000..dcd7fdb19 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/002.stderr.txt @@ -0,0 +1,27 @@ +Error: unsupported format 'json'; expected table, ndjson, or csv +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/003.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/003.stderr.txt new file mode 100644 index 000000000..c4b1c658e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/003.stderr.txt @@ -0,0 +1,27 @@ +Error: unsupported format 'tsv'; expected table, ndjson, or csv +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadAndCatRequireScopeForMultiObjectFiles/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadAndCatRequireScopeForMultiObjectFiles/001.stderr.txt new file mode 100644 index 000000000..080061baf --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadAndCatRequireScopeForMultiObjectFiles/001.stderr.txt @@ -0,0 +1 @@ +Error: head/cat requires -t/--table when the file contains multiple tables diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit/001.stderr.txt new file mode 100644 index 000000000..dde771444 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --offset requires a positive --limit +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.HelpListsExactlyCurrentCommandSurface/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.HelpListsExactlyCurrentCommandSurface/001.stdout.txt new file mode 100644 index 000000000..67e8c664e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.HelpListsExactlyCurrentCommandSurface/001.stdout.txt @@ -0,0 +1,26 @@ +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.LegacyColumnsOptionIsRejected/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.LegacyColumnsOptionIsRejected/001.stderr.txt new file mode 100644 index 000000000..6e07e6fb1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.LegacyColumnsOptionIsRejected/001.stderr.txt @@ -0,0 +1,27 @@ +Error: Unknown flag: --columns +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.LsReturnsModelAndObjectFields/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.LsReturnsModelAndObjectFields/001.stdout.txt new file mode 100644 index 000000000..9671b0beb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.LsReturnsModelAndObjectFields/001.stdout.txt @@ -0,0 +1,2 @@ +model,object +table,table1 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/001.stderr.txt new file mode 100644 index 000000000..e5b7396a4 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --measurements accepts one column per option; repeat -m +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/002.stderr.txt new file mode 100644 index 000000000..cb9ee4a43 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/002.stderr.txt @@ -0,0 +1,27 @@ +Error: measurement 's1' specified more than once +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.MetaOnlyReturnsSizeFormatVersionAndModel/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MetaOnlyReturnsSizeFormatVersionAndModel/001.stdout.txt new file mode 100644 index 000000000..2db261e60 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MetaOnlyReturnsSizeFormatVersionAndModel/001.stdout.txt @@ -0,0 +1,2 @@ +size_bytes,format_version,model +508,4,table diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt new file mode 100644 index 000000000..a8cfeaa0c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt @@ -0,0 +1 @@ +Error: failed to read table schemas: invalid argument diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.ModelDetectionPrefersTableSchemaAndFallsBackToTree/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ModelDetectionPrefersTableSchemaAndFallsBackToTree/002.stdout.txt new file mode 100644 index 000000000..35e8b697c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.ModelDetectionPrefersTableSchemaAndFallsBackToTree/002.stdout.txt @@ -0,0 +1,2 @@ +model,object +tree,root.test.d1 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/001.stderr.txt new file mode 100644 index 000000000..9daf585dc --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/001.stderr.txt @@ -0,0 +1,27 @@ +Error: two or more tag filters require --tag-match all or any +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/002.stdout.txt new file mode 100644 index 000000000..c0c4dd78c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/002.stdout.txt @@ -0,0 +1,3 @@ +time,id1,s1 +0,dev_a,10 +3,dev_c,40 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/001.stderr.txt new file mode 100644 index 000000000..5f9548b56 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/001.stderr.txt @@ -0,0 +1,27 @@ +Error: Unexpected argument after file: -f +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/002.stdout.txt new file mode 100644 index 000000000..e10e589b6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/002.stdout.txt @@ -0,0 +1,6 @@ +time id1 id2 s1 +0 id1_field_1 id2_field_2 0 +1 id1_field_1 id2_field_2 10 +2 id1_field_1 id2_field_2 20 +3 id1_field_1 id2_field_2 30 +4 id1_field_1 id2_field_2 40 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.SampleIsNotACommand/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SampleIsNotACommand/001.stderr.txt new file mode 100644 index 000000000..c6d57aaeb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SampleIsNotACommand/001.stderr.txt @@ -0,0 +1,27 @@ +Unknown command: sample +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt new file mode 100644 index 000000000..f0cd72934 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt @@ -0,0 +1,4 @@ +model,object,column,category,data_type,encoding,compression +table,table1,id1,TAG,STRING,PLAIN,UNCOMPRESSED +table,table1,id2,TAG,STRING,PLAIN,UNCOMPRESSED +table,table1,s1,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchRejectsRegularResultFormat/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchRejectsRegularResultFormat/001.stderr.txt new file mode 100644 index 000000000..ff6768d18 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchRejectsRegularResultFormat/001.stderr.txt @@ -0,0 +1,27 @@ +Error: sketch does not accept --format; its output follows printSketch +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/001.stdout.txt new file mode 100644 index 000000000..eb657bea3 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/001.stdout.txt @@ -0,0 +1,55 @@ +-------------------------------- TsFile Sketch -------------------------------- +file path: tsfile_cli_fixture_214.tsfile +file length: 508 + + POSITION| CONTENT + -------- ------- + 0| [magic head] TsFile + 6| [version number] 4 +||||||||||||||||||||| [ChunkGroup] of table1.id1_field_1.id2_field_2, num of Chunks:2 + 7| [ChunkGroup Header] + 7| [marker] 0 + 8| [deviceID] table1.id1_field_1.id2_field_2 size=32 + 40| [Chunk] of table1.id1_field_1.id2_field_2., startTime: 0 endTime: 4 count: 5 + 40| [Chunk Header] marker=-123, measurementID=, dataSize=20, dataType=VECTOR, compressionType=LZ4, encodingType=TS_2DIFF, size=6 + 46| [Page Header] HeaderSize:2, UncompressedSize:24, CompressedSize:18 + 48| [Page Data] Size:18 + 66| [Chunk] of table1.id1_field_1.id2_field_2.s1, startTime: 0 endTime: 4 count: 5 [minValue:0,maxValue:40,firstValue:0,lastValue:40,sumValue:100.0] + 66| [Chunk Header] marker=69, measurementID=s1, dataSize=47, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=8 + 74| [Page Header] HeaderSize:2, UncompressedSize:45, CompressedSize:45 + 76| [Page Data] Size:45 +||||||||||||||||||||| [ChunkGroup] of table1.id1_field_1.id2_field_2 ends + 138| [marker] 2 + 139| [TimeseriesMetadata] of table1.id1_field_1.id2_field_2., tsDataType:VECTOR, sizeWithoutChunkMetadata:21, startTime: 0 endTime: 4 count: 5 + 160| [ChunkMetadata] offset=40, size=8 + 168| [TimeseriesMetadata] of table1.id1_field_1.id2_field_2.s1, tsDataType:INT64, sizeWithoutChunkMetadata:63, startTime: 0 endTime: 4 count: 5 [minValue:0,maxValue:40,firstValue:0,lastValue:40,sumValue:100.0] + 231| [ChunkMetadata] offset=66, size=8 + 239| [MetadataIndexNode] + 239| childrenCnt=1 + 240| <, 139> + 249| endOffset=239 + 257| nodeType=LEAF_MEASUREMENT +||||||||||||||||||||| [TsFileMetadata] begins + 258| TableIndexRootCnt=1 + 262| [Table Name] table1, size=10 + 272| [MetadataIndexNode] + 272| childrenCnt=1 + 273| + 313| endOffset=258 + 321| nodeType=LEAF_DEVICE + 322| TableSchemaCnt=1 + 326| [TableSchema] TableSchema{tableName='table1', columnSchemas=[[id1,STRING,PLAIN,,UNCOMPRESSED], [id2,STRING,PLAIN,,UNCOMPRESSED], [s1,INT64,PLAIN,,UNCOMPRESSED]], columnTypes=[TAG, TAG, FIELD]}, size=54 + 390| [Meta Offset] 138 + 398| [Bloom Filter Size] bit vector byte array length=305 + 402| [Bloom Filter] , filterCapacity=256, hashFunctionSize=5 +||||||||||||||||||||| [TsFileMetadata] ends + 498| [TsFileMetadataSize] 240 + 502| [magic tail] TsFile + 508| END of TsFile +---------------------------- IndexOfTimerseriesIndex Tree ----------------------------- +table1 + [MetadataIndex:LEAF_DEVICE] + └──────[table1.id1_field_1.id2_field_2,239] + [MetadataIndex:LEAF_MEASUREMENT] + └──────[,139] +---------------------------------- TsFile Sketch End ---------------------------------- diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/003.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/003.stderr.txt new file mode 100644 index 000000000..584c5cdf0 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/003.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_sketch_215.txt' already exists; use --force to replace a regular file diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/005.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/005.stderr.txt new file mode 100644 index 000000000..a2af9bd99 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/005.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_fixture_214.tsfile' is the same as the input file 'tsfile_cli_fixture_214.tsfile' diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.VersionIncludesConcreteBuildMetadata/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.VersionIncludesConcreteBuildMetadata/001.stdout.txt new file mode 100644 index 000000000..d735ea019 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.VersionIncludesConcreteBuildMetadata/001.stdout.txt @@ -0,0 +1 @@ +tsfile-cli tsfile= commit= built= diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/002.roundtrip.txt new file mode 100644 index 000000000..24e1ff918 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"1000","site":"beijing","temp":21,"humidity":40.5} +{"time":"2000","site":"beijing","temp":21.5,"humidity":41} diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/003.stdout.txt new file mode 100644 index 000000000..5051a986b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/003.stdout.txt @@ -0,0 +1,4 @@ +model,object,column,category,data_type,encoding,compression +table,sensors,site,TAG,STRING,PLAIN,LZ4 +table,sensors,temp,FIELD,FLOAT,GORILLA,UNCOMPRESSED +table,sensors,humidity,FIELD,FLOAT,GORILLA,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/004.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/004.stderr.txt new file mode 100644 index 000000000..6752d7388 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/004.stderr.txt @@ -0,0 +1 @@ +Error: encoding for data type FLOAT specified more than once diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/005.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/005.stderr.txt new file mode 100644 index 000000000..572a4cba5 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/005.stderr.txt @@ -0,0 +1 @@ +Error: physical override type DOUBLE is not used by any declared TAG or FIELD diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/006.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/006.stderr.txt new file mode 100644 index 000000000..25b8b5d0e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/006.stderr.txt @@ -0,0 +1 @@ +Error: encoding GORILLA is not supported for data type BLOB diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/002.roundtrip.txt new file mode 100644 index 000000000..df77ffc17 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"1000","site":null,"temp":21} +{"time":"1000","site":"","temp":22} diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/004.stdout.txt new file mode 100644 index 000000000..7fd95e316 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/004.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,sensors,site,TAG,2,2,1,1,1000,1000,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/002.roundtrip.txt new file mode 100644 index 000000000..e3b1d53a3 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"1000","site":"beijing","temp":21.5} +{"time":"2000","site":"shanghai","temp":22} diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/003.stdout.txt new file mode 100644 index 000000000..1108045bc --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/003.stdout.txt @@ -0,0 +1,3 @@ +time,site,temp +1000,beijing,21.5 +2000,shanghai,22 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsExistingOutputWithoutTruncating/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsExistingOutputWithoutTruncating/001.stderr.txt new file mode 100644 index 000000000..fe7bd3fb6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsExistingOutputWithoutTruncating/001.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_existing_out_189.tsfile' already exists; use --force to replace a regular file diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/001.stderr.txt new file mode 100644 index 000000000..426bf4ac2 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/001.stderr.txt @@ -0,0 +1 @@ +Error: CSV header is missing required column 'temp' diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/002.stderr.txt new file mode 100644 index 000000000..3f6d2ed28 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/002.stderr.txt @@ -0,0 +1 @@ +Error: CSV contains undeclared column 'status' diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/003.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/003.stderr.txt new file mode 100644 index 000000000..1e490c285 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/003.stderr.txt @@ -0,0 +1 @@ +Error: CSV header name 'TEMP' conflicts case-insensitively diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/001.stderr.txt new file mode 100644 index 000000000..5d120bfe1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/001.stderr.txt @@ -0,0 +1,27 @@ +Error: choose exactly one of --input or --stdin +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/002.stderr.txt new file mode 100644 index 000000000..4195dd340 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/002.stderr.txt @@ -0,0 +1,27 @@ +Error: write input format is fixed CSV; --format is not valid +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/001.stderr.txt new file mode 100644 index 000000000..68af0964d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/001.stderr.txt @@ -0,0 +1 @@ +Error: bad timestamp '+1' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/002.stderr.txt new file mode 100644 index 000000000..b537316a7 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/002.stderr.txt @@ -0,0 +1 @@ +Error: bad timestamp '01' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/003.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/003.stderr.txt new file mode 100644 index 000000000..b2b862f90 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/003.stderr.txt @@ -0,0 +1 @@ +Error: bad timestamp '-0' (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonRegularInputBeforeCreatingOutput/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonRegularInputBeforeCreatingOutput/001.stderr.txt new file mode 100644 index 000000000..6ca4b00f0 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonRegularInputBeforeCreatingOutput/001.stderr.txt @@ -0,0 +1 @@ +Error: input must be a regular CSV file: tsfile_cli_input_dir_190 diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsUnterminatedQuotedCsvField/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsUnterminatedQuotedCsvField/001.stderr.txt new file mode 100644 index 000000000..3f05739e6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsUnterminatedQuotedCsvField/001.stderr.txt @@ -0,0 +1 @@ +Error: unterminated quoted CSV field (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/001.stderr.txt new file mode 100644 index 000000000..02a928e10 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/001.stderr.txt @@ -0,0 +1 @@ +Error: output target 'tsfile_cli_target_198.csv' is the same as the input file 'tsfile_cli_target_198.csv' diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/002.stderr.txt new file mode 100644 index 000000000..ec92fe4c4 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/002.stderr.txt @@ -0,0 +1 @@ +Error: cannot create output temporary file for 'tsfile_cli_missing_parent_199/out.tsfile': No such file or directory diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/002.roundtrip.txt new file mode 100644 index 000000000..f3e180a1e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"0","id1":"dev","s1":"0"} +{"time":"1","id1":"dev","s1":"10"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/003.stdout.txt new file mode 100644 index 000000000..087aecb27 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/003.stdout.txt @@ -0,0 +1,3 @@ +time,id1,s1 +0,dev,0 +1,dev,10 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt new file mode 100644 index 000000000..04a035d28 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt @@ -0,0 +1 @@ +Error: duplicate object name after UTF-8 replacement: "bad�" diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt new file mode 100644 index 000000000..4628d35d5 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,data_type,encoding,compression +tree,bad�,left,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt new file mode 100644 index 000000000..5b4449b80 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +tree,bad�,left,FIELD,1,\N,1,0,1000,1000,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt new file mode 100644 index 000000000..c24fa03c5 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt @@ -0,0 +1,2 @@ +model,object,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +tree,bad�,left,INT64,1,0,1000,1000,42,42,42,42,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt new file mode 100644 index 000000000..4c480dbac --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt @@ -0,0 +1,2 @@ +model object column category data_type encoding compression +tree bad� left FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt new file mode 100644 index 000000000..de70a03bd --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt @@ -0,0 +1,2 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +tree bad� left FIELD 1 1 0 1000 1000 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt new file mode 100644 index 000000000..c4f17d0c3 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt @@ -0,0 +1,2 @@ +model object field data_type non_null_count null_count min_time max_time min max first last sum stats_source +tree bad� left INT64 1 0 1000 1000 42 42 42 42 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt new file mode 100644 index 000000000..5905cbe6d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt @@ -0,0 +1 @@ +{"model":"tree","object":"bad�","column":"left","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt new file mode 100644 index 000000000..8715ec0fb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt @@ -0,0 +1 @@ +{"model":"tree","object":"bad�","column":"left","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","time_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt new file mode 100644 index 000000000..8b23d5841 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt @@ -0,0 +1 @@ +{"model":"tree","object":"bad�","field":"left","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/063.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/063.stdout.txt new file mode 100644 index 000000000..c846703a6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/063.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,data_type,encoding,compression +table,bad�,id,TAG,STRING,PLAIN,UNCOMPRESSED +table,bad�,left,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/064.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/064.stdout.txt new file mode 100644 index 000000000..bda02b6a5 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/064.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,data_type,encoding,compression +table,bad�,left,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/066.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/066.stdout.txt new file mode 100644 index 000000000..6c470d02f --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/066.stdout.txt @@ -0,0 +1,3 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,bad�,id,TAG,2,2,2,0,1000,1001,scan +table,bad�,left,FIELD,2,2,2,0,1000,1001,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/067.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/067.stdout.txt new file mode 100644 index 000000000..6cc7f111d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/067.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,bad�,left,FIELD,2,2,2,0,1000,1001,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt new file mode 100644 index 000000000..fbef29b1b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt @@ -0,0 +1,3 @@ +model,object,tag.id,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,bad�,first,left,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +table,bad�,second,left,INT64,1,0,1001,1001,42,42,42,42,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/073.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/073.stdout.txt new file mode 100644 index 000000000..556f8ecd2 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/073.stdout.txt @@ -0,0 +1,3 @@ +model object column category data_type encoding compression +table bad� id TAG STRING PLAIN UNCOMPRESSED +table bad� left FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/074.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/074.stdout.txt new file mode 100644 index 000000000..899d2bba2 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/074.stdout.txt @@ -0,0 +1,2 @@ +model object column category data_type encoding compression +table bad� left FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/076.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/076.stdout.txt new file mode 100644 index 000000000..d94fd8698 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/076.stdout.txt @@ -0,0 +1,3 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +table bad� id TAG 2 2 2 0 1000 1001 scan +table bad� left FIELD 2 2 2 0 1000 1001 scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/077.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/077.stdout.txt new file mode 100644 index 000000000..9668c67f8 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/077.stdout.txt @@ -0,0 +1,2 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +table bad� left FIELD 2 2 2 0 1000 1001 scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt new file mode 100644 index 000000000..df99e4983 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt @@ -0,0 +1,3 @@ +model object tag.id field data_type non_null_count null_count min_time max_time min max first last sum stats_source +table bad� first left INT64 1 0 1000 1000 42 42 42 42 statistics +table bad� second left INT64 1 0 1001 1001 42 42 42 42 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/083.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/083.stdout.txt new file mode 100644 index 000000000..cdd9d5f6e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/083.stdout.txt @@ -0,0 +1,2 @@ +{"model":"table","object":"bad�","column":"id","category":"TAG","data_type":"STRING","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"bad�","column":"left","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/084.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/084.stdout.txt new file mode 100644 index 000000000..c5b500469 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/084.stdout.txt @@ -0,0 +1 @@ +{"model":"table","object":"bad�","column":"left","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/086.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/086.stdout.txt new file mode 100644 index 000000000..0c02f7915 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/086.stdout.txt @@ -0,0 +1,2 @@ +{"model":"table","object":"bad�","column":"id","category":"TAG","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"bad�","column":"left","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/087.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/087.stdout.txt new file mode 100644 index 000000000..2c7cb4d06 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/087.stdout.txt @@ -0,0 +1 @@ +{"model":"table","object":"bad�","column":"left","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt new file mode 100644 index 000000000..a4cd2d18c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt @@ -0,0 +1,2 @@ +{"model":"table","object":"bad�","tag.id":"first","field":"left","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"bad�","tag.id":"second","field":"left","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1001","max_time":"1001","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/001.stdout.txt new file mode 100644 index 000000000..81abde8aa --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/001.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,data_type,encoding,compression +tree,a,bad�,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/002.stdout.txt new file mode 100644 index 000000000..d1a1add8d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/002.stdout.txt @@ -0,0 +1,5 @@ +model,object,column,category,data_type,encoding,compression +tree,a,bad�,FIELD,INT64,PLAIN,UNCOMPRESSED +tree,a,value,FIELD,INT64,PLAIN,UNCOMPRESSED +tree,b,bad�,FIELD,INT64,PLAIN,UNCOMPRESSED +tree,b,value,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/003.stdout.txt new file mode 100644 index 000000000..63044f6d6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/003.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +tree,a,bad�,FIELD,1,\N,1,0,1000,1000,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/004.stdout.txt new file mode 100644 index 000000000..b8fedecf8 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/004.stdout.txt @@ -0,0 +1,5 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +tree,a,bad�,FIELD,1,\N,1,0,1000,1000,statistics +tree,a,value,FIELD,1,\N,1,0,1000,1000,statistics +tree,b,bad�,FIELD,1,\N,1,0,1000,1000,statistics +tree,b,value,FIELD,1,\N,1,0,1000,1000,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/005.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/005.stdout.txt new file mode 100644 index 000000000..47198b066 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/005.stdout.txt @@ -0,0 +1,2 @@ +model,object,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +tree,a,bad�,INT64,1,0,1000,1000,42,42,42,42,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/006.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/006.stdout.txt new file mode 100644 index 000000000..a569e9ed3 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/006.stdout.txt @@ -0,0 +1,5 @@ +model,object,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +tree,a,bad�,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +tree,a,value,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +tree,b,bad�,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +tree,b,value,INT64,1,0,1000,1000,42,42,42,42,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/007.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/007.stdout.txt new file mode 100644 index 000000000..b65df608a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/007.stdout.txt @@ -0,0 +1,2 @@ +time,bad� +1000,42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010.0001.csv.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010.0001.csv.txt new file mode 100644 index 000000000..3704e8372 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010.0001.csv.txt @@ -0,0 +1,2 @@ +time,bad�,value +1000,42,42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010._manifest.json.txt new file mode 100644 index 000000000..0dcbd2e77 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.csv","model":"tree","object":"a","type":"csv","rows":"1"}, + {"file":"0002.csv","model":"tree","object":"b","type":"csv","rows":"1"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/011.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/011.stdout.txt new file mode 100644 index 000000000..eb2054b80 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/011.stdout.txt @@ -0,0 +1,2 @@ +model object column category data_type encoding compression +tree a bad� FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/012.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/012.stdout.txt new file mode 100644 index 000000000..c10a2bf5a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/012.stdout.txt @@ -0,0 +1,5 @@ +model object column category data_type encoding compression +tree a bad� FIELD INT64 PLAIN UNCOMPRESSED +tree a value FIELD INT64 PLAIN UNCOMPRESSED +tree b bad� FIELD INT64 PLAIN UNCOMPRESSED +tree b value FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/013.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/013.stdout.txt new file mode 100644 index 000000000..3ac7f75c6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/013.stdout.txt @@ -0,0 +1,2 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +tree a bad� FIELD 1 1 0 1000 1000 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/014.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/014.stdout.txt new file mode 100644 index 000000000..a37742add --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/014.stdout.txt @@ -0,0 +1,5 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +tree a bad� FIELD 1 1 0 1000 1000 statistics +tree a value FIELD 1 1 0 1000 1000 statistics +tree b bad� FIELD 1 1 0 1000 1000 statistics +tree b value FIELD 1 1 0 1000 1000 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/015.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/015.stdout.txt new file mode 100644 index 000000000..f3a0958cc --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/015.stdout.txt @@ -0,0 +1,2 @@ +model object field data_type non_null_count null_count min_time max_time min max first last sum stats_source +tree a bad� INT64 1 0 1000 1000 42 42 42 42 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/016.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/016.stdout.txt new file mode 100644 index 000000000..3c8e82f6c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/016.stdout.txt @@ -0,0 +1,5 @@ +model object field data_type non_null_count null_count min_time max_time min max first last sum stats_source +tree a bad� INT64 1 0 1000 1000 42 42 42 42 statistics +tree a value INT64 1 0 1000 1000 42 42 42 42 statistics +tree b bad� INT64 1 0 1000 1000 42 42 42 42 statistics +tree b value INT64 1 0 1000 1000 42 42 42 42 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/017.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/017.stdout.txt new file mode 100644 index 000000000..9a7d9338a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/017.stdout.txt @@ -0,0 +1,2 @@ +time bad� +1000 42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020.0001.txt.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020.0001.txt.txt new file mode 100644 index 000000000..be75de815 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020.0001.txt.txt @@ -0,0 +1,2 @@ +time bad� value +1000 42 42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020._manifest.json.txt new file mode 100644 index 000000000..33617869a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.txt","model":"tree","object":"a","type":"table","rows":"1"}, + {"file":"0002.txt","model":"tree","object":"b","type":"table","rows":"1"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/021.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/021.stdout.txt new file mode 100644 index 000000000..b58204ae5 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/021.stdout.txt @@ -0,0 +1 @@ +{"model":"tree","object":"a","column":"bad�","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/022.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/022.stdout.txt new file mode 100644 index 000000000..f372865af --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/022.stdout.txt @@ -0,0 +1,4 @@ +{"model":"tree","object":"a","column":"bad�","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"tree","object":"a","column":"value","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"tree","object":"b","column":"bad�","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"tree","object":"b","column":"value","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/023.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/023.stdout.txt new file mode 100644 index 000000000..e4ef678d7 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/023.stdout.txt @@ -0,0 +1 @@ +{"model":"tree","object":"a","column":"bad�","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","time_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/024.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/024.stdout.txt new file mode 100644 index 000000000..f838e9fb1 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/024.stdout.txt @@ -0,0 +1,4 @@ +{"model":"tree","object":"a","column":"bad�","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","time_source":"statistics"} +{"model":"tree","object":"a","column":"value","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","time_source":"statistics"} +{"model":"tree","object":"b","column":"bad�","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","time_source":"statistics"} +{"model":"tree","object":"b","column":"value","category":"FIELD","row_count":"1","entity_count":null,"non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","time_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/025.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/025.stdout.txt new file mode 100644 index 000000000..e7799bf1e --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/025.stdout.txt @@ -0,0 +1 @@ +{"model":"tree","object":"a","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/026.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/026.stdout.txt new file mode 100644 index 000000000..68cbf3fde --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/026.stdout.txt @@ -0,0 +1,4 @@ +{"model":"tree","object":"a","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"tree","object":"a","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"tree","object":"b","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"tree","object":"b","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/027.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/027.stdout.txt new file mode 100644 index 000000000..ce7063aae --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/027.stdout.txt @@ -0,0 +1 @@ +{"time":"1000","bad�":"42"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030.0001.ndjson.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030.0001.ndjson.txt new file mode 100644 index 000000000..d3a4dd00c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030.0001.ndjson.txt @@ -0,0 +1 @@ +{"time":"1000","bad�":"42","value":"42"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030._manifest.json.txt new file mode 100644 index 000000000..f02fa8a43 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.ndjson","model":"tree","object":"a","type":"ndjson","rows":"1"}, + {"file":"0002.ndjson","model":"tree","object":"b","type":"ndjson","rows":"1"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/031.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/031.stdout.txt new file mode 100644 index 000000000..740f8fd2a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/031.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,data_type,encoding,compression +table,a,bad�,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/032.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/032.stdout.txt new file mode 100644 index 000000000..72bd5e3c2 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/032.stdout.txt @@ -0,0 +1,7 @@ +model,object,column,category,data_type,encoding,compression +table,a,id,TAG,STRING,PLAIN,UNCOMPRESSED +table,a,bad�,FIELD,INT64,PLAIN,UNCOMPRESSED +table,a,value,FIELD,INT64,PLAIN,UNCOMPRESSED +table,b,id,TAG,STRING,PLAIN,UNCOMPRESSED +table,b,bad�,FIELD,INT64,PLAIN,UNCOMPRESSED +table,b,value,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/033.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/033.stdout.txt new file mode 100644 index 000000000..50240d29d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/033.stdout.txt @@ -0,0 +1,2 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,a,bad�,FIELD,2,2,2,0,1000,1001,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/034.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/034.stdout.txt new file mode 100644 index 000000000..df2b1be7b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/034.stdout.txt @@ -0,0 +1,7 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,a,id,TAG,2,2,2,0,1000,1001,scan +table,a,bad�,FIELD,2,2,2,0,1000,1001,scan +table,a,value,FIELD,2,2,2,0,1000,1001,scan +table,b,id,TAG,2,2,2,0,1000,1001,scan +table,b,bad�,FIELD,2,2,2,0,1000,1001,scan +table,b,value,FIELD,2,2,2,0,1000,1001,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/035.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/035.stdout.txt new file mode 100644 index 000000000..6571e3524 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/035.stdout.txt @@ -0,0 +1,3 @@ +model,object,tag.id,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,a,first,bad�,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +table,a,second,bad�,INT64,1,0,1001,1001,42,42,42,42,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/036.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/036.stdout.txt new file mode 100644 index 000000000..3fff7b3eb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/036.stdout.txt @@ -0,0 +1,9 @@ +model,object,tag.id,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,a,first,bad�,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +table,a,first,value,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +table,a,second,bad�,INT64,1,0,1001,1001,42,42,42,42,\N,statistics +table,a,second,value,INT64,1,0,1001,1001,42,42,42,42,\N,statistics +table,b,first,bad�,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +table,b,first,value,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +table,b,second,bad�,INT64,1,0,1001,1001,42,42,42,42,\N,statistics +table,b,second,value,INT64,1,0,1001,1001,42,42,42,42,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/037.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/037.stdout.txt new file mode 100644 index 000000000..3a083cd33 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/037.stdout.txt @@ -0,0 +1,3 @@ +time,id,bad� +1000,first,42 +1001,second,42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040.0001.csv.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040.0001.csv.txt new file mode 100644 index 000000000..7a61c6745 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040.0001.csv.txt @@ -0,0 +1,3 @@ +time,id,bad�,value +1000,first,42,42 +1001,second,42,42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040._manifest.json.txt new file mode 100644 index 000000000..1c72e0e5f --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.csv","model":"table","object":"a","type":"csv","rows":"2"}, + {"file":"0002.csv","model":"table","object":"b","type":"csv","rows":"2"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/041.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/041.stdout.txt new file mode 100644 index 000000000..14a671b69 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/041.stdout.txt @@ -0,0 +1,2 @@ +model object column category data_type encoding compression +table a bad� FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/042.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/042.stdout.txt new file mode 100644 index 000000000..e6525bf6a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/042.stdout.txt @@ -0,0 +1,7 @@ +model object column category data_type encoding compression +table a id TAG STRING PLAIN UNCOMPRESSED +table a bad� FIELD INT64 PLAIN UNCOMPRESSED +table a value FIELD INT64 PLAIN UNCOMPRESSED +table b id TAG STRING PLAIN UNCOMPRESSED +table b bad� FIELD INT64 PLAIN UNCOMPRESSED +table b value FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/043.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/043.stdout.txt new file mode 100644 index 000000000..55342b643 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/043.stdout.txt @@ -0,0 +1,2 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +table a bad� FIELD 2 2 2 0 1000 1001 scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/044.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/044.stdout.txt new file mode 100644 index 000000000..e97b73b96 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/044.stdout.txt @@ -0,0 +1,7 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +table a id TAG 2 2 2 0 1000 1001 scan +table a bad� FIELD 2 2 2 0 1000 1001 scan +table a value FIELD 2 2 2 0 1000 1001 scan +table b id TAG 2 2 2 0 1000 1001 scan +table b bad� FIELD 2 2 2 0 1000 1001 scan +table b value FIELD 2 2 2 0 1000 1001 scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/045.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/045.stdout.txt new file mode 100644 index 000000000..1eb580ade --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/045.stdout.txt @@ -0,0 +1,3 @@ +model object tag.id field data_type non_null_count null_count min_time max_time min max first last sum stats_source +table a first bad� INT64 1 0 1000 1000 42 42 42 42 statistics +table a second bad� INT64 1 0 1001 1001 42 42 42 42 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/046.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/046.stdout.txt new file mode 100644 index 000000000..c06ef0201 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/046.stdout.txt @@ -0,0 +1,9 @@ +model object tag.id field data_type non_null_count null_count min_time max_time min max first last sum stats_source +table a first bad� INT64 1 0 1000 1000 42 42 42 42 statistics +table a first value INT64 1 0 1000 1000 42 42 42 42 statistics +table a second bad� INT64 1 0 1001 1001 42 42 42 42 statistics +table a second value INT64 1 0 1001 1001 42 42 42 42 statistics +table b first bad� INT64 1 0 1000 1000 42 42 42 42 statistics +table b first value INT64 1 0 1000 1000 42 42 42 42 statistics +table b second bad� INT64 1 0 1001 1001 42 42 42 42 statistics +table b second value INT64 1 0 1001 1001 42 42 42 42 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/047.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/047.stdout.txt new file mode 100644 index 000000000..15f855659 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/047.stdout.txt @@ -0,0 +1,3 @@ +time id bad� +1000 first 42 +1001 second 42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050.0001.txt.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050.0001.txt.txt new file mode 100644 index 000000000..ee8b8b964 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050.0001.txt.txt @@ -0,0 +1,3 @@ +time id bad� value +1000 first 42 42 +1001 second 42 42 diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050._manifest.json.txt new file mode 100644 index 000000000..f45c6e5c3 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.txt","model":"table","object":"a","type":"table","rows":"2"}, + {"file":"0002.txt","model":"table","object":"b","type":"table","rows":"2"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/051.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/051.stdout.txt new file mode 100644 index 000000000..2601573bb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/051.stdout.txt @@ -0,0 +1 @@ +{"model":"table","object":"a","column":"bad�","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/052.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/052.stdout.txt new file mode 100644 index 000000000..c5c19dd9a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/052.stdout.txt @@ -0,0 +1,6 @@ +{"model":"table","object":"a","column":"id","category":"TAG","data_type":"STRING","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"a","column":"bad�","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"a","column":"value","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"b","column":"id","category":"TAG","data_type":"STRING","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"b","column":"bad�","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"b","column":"value","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/053.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/053.stdout.txt new file mode 100644 index 000000000..41a973f30 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/053.stdout.txt @@ -0,0 +1 @@ +{"model":"table","object":"a","column":"bad�","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/054.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/054.stdout.txt new file mode 100644 index 000000000..9872a746f --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/054.stdout.txt @@ -0,0 +1,6 @@ +{"model":"table","object":"a","column":"id","category":"TAG","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"a","column":"bad�","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"a","column":"value","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"b","column":"id","category":"TAG","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"b","column":"bad�","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"b","column":"value","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/055.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/055.stdout.txt new file mode 100644 index 000000000..9e60c4ee7 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/055.stdout.txt @@ -0,0 +1,2 @@ +{"model":"table","object":"a","tag.id":"first","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"a","tag.id":"second","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1001","max_time":"1001","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/056.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/056.stdout.txt new file mode 100644 index 000000000..ca3444886 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/056.stdout.txt @@ -0,0 +1,8 @@ +{"model":"table","object":"a","tag.id":"first","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"a","tag.id":"first","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"a","tag.id":"second","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1001","max_time":"1001","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"a","tag.id":"second","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1001","max_time":"1001","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"b","tag.id":"first","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"b","tag.id":"first","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"b","tag.id":"second","field":"bad�","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1001","max_time":"1001","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"b","tag.id":"second","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1001","max_time":"1001","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/057.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/057.stdout.txt new file mode 100644 index 000000000..7058a2184 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/057.stdout.txt @@ -0,0 +1,2 @@ +{"time":"1000","id":"first","bad�":"42"} +{"time":"1001","id":"second","bad�":"42"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060.0001.ndjson.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060.0001.ndjson.txt new file mode 100644 index 000000000..509fa0cba --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060.0001.ndjson.txt @@ -0,0 +1,2 @@ +{"time":"1000","id":"first","bad�":"42","value":"42"} +{"time":"1001","id":"second","bad�":"42","value":"42"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060._manifest.json.txt new file mode 100644 index 000000000..99bbecde2 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060._manifest.json.txt @@ -0,0 +1,7 @@ +{ + "complete": true, + "files": [ + {"file":"0001.ndjson","model":"table","object":"a","type":"ndjson","rows":"2"}, + {"file":"0002.ndjson","model":"table","object":"b","type":"ndjson","rows":"2"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/001.stderr.txt new file mode 100644 index 000000000..aeeecc0f8 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/001.stderr.txt @@ -0,0 +1 @@ +Error: duplicate column name after UTF-8 replacement: "tag.bad�" diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/002.stdout.txt new file mode 100644 index 000000000..89b558005 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/002.stdout.txt @@ -0,0 +1,5 @@ +model,object,column,category,data_type,encoding,compression +table,a,bad�,TAG,STRING,PLAIN,UNCOMPRESSED +table,a,value,FIELD,INT64,PLAIN,UNCOMPRESSED +table,b,bad�,TAG,STRING,PLAIN,UNCOMPRESSED +table,b,value,FIELD,INT64,PLAIN,UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/003.stdout.txt new file mode 100644 index 000000000..600469f3d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/003.stdout.txt @@ -0,0 +1,5 @@ +model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source +table,a,bad�,TAG,2,2,2,0,1000,1001,scan +table,a,value,FIELD,2,2,2,0,1000,1001,scan +table,b,bad�,TAG,2,2,2,0,1000,1001,scan +table,b,value,FIELD,2,2,2,0,1000,1001,scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/004.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/004.stdout.txt new file mode 100644 index 000000000..59121b06a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/004.stdout.txt @@ -0,0 +1,3 @@ +model,object,tag.bad�,field,data_type,non_null_count,null_count,min_time,max_time,min,max,first,last,sum,stats_source +table,a,first,value,INT64,1,0,1000,1000,42,42,42,42,\N,statistics +table,a,second,value,INT64,1,0,1001,1001,42,42,42,42,\N,statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/006.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/006.stdout.txt new file mode 100644 index 000000000..3b6111822 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/006.stdout.txt @@ -0,0 +1,5 @@ +model object column category data_type encoding compression +table a bad� TAG STRING PLAIN UNCOMPRESSED +table a value FIELD INT64 PLAIN UNCOMPRESSED +table b bad� TAG STRING PLAIN UNCOMPRESSED +table b value FIELD INT64 PLAIN UNCOMPRESSED diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/007.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/007.stdout.txt new file mode 100644 index 000000000..e097e3234 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/007.stdout.txt @@ -0,0 +1,5 @@ +model object column category row_count entity_count non_null_count null_count min_time max_time time_source +table a bad� TAG 2 2 2 0 1000 1001 scan +table a value FIELD 2 2 2 0 1000 1001 scan +table b bad� TAG 2 2 2 0 1000 1001 scan +table b value FIELD 2 2 2 0 1000 1001 scan diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/008.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/008.stdout.txt new file mode 100644 index 000000000..17feb2368 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/008.stdout.txt @@ -0,0 +1,3 @@ +model object tag.bad� field data_type non_null_count null_count min_time max_time min max first last sum stats_source +table a first value INT64 1 0 1000 1000 42 42 42 42 statistics +table a second value INT64 1 0 1001 1001 42 42 42 42 statistics diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/010.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/010.stdout.txt new file mode 100644 index 000000000..151d878d9 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/010.stdout.txt @@ -0,0 +1,4 @@ +{"model":"table","object":"a","column":"bad�","category":"TAG","data_type":"STRING","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"a","column":"value","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"b","column":"bad�","category":"TAG","data_type":"STRING","encoding":"PLAIN","compression":"UNCOMPRESSED"} +{"model":"table","object":"b","column":"value","category":"FIELD","data_type":"INT64","encoding":"PLAIN","compression":"UNCOMPRESSED"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/011.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/011.stdout.txt new file mode 100644 index 000000000..bbe8e563d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/011.stdout.txt @@ -0,0 +1,4 @@ +{"model":"table","object":"a","column":"bad�","category":"TAG","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"a","column":"value","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"b","column":"bad�","category":"TAG","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} +{"model":"table","object":"b","column":"value","category":"FIELD","row_count":"2","entity_count":"2","non_null_count":"2","null_count":"0","min_time":"1000","max_time":"1001","time_source":"scan"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/012.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/012.stdout.txt new file mode 100644 index 000000000..7b929c988 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/012.stdout.txt @@ -0,0 +1,2 @@ +{"model":"table","object":"a","tag.bad�":"first","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1000","max_time":"1000","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} +{"model":"table","object":"a","tag.bad�":"second","field":"value","data_type":"INT64","non_null_count":"1","null_count":"0","min_time":"1001","max_time":"1001","min":"42","max":"42","first":"42","last":"42","sum":null,"stats_source":"statistics"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt new file mode 100644 index 000000000..e271411a6 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt @@ -0,0 +1,2 @@ +model,object +table,t diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt new file mode 100644 index 000000000..38f8e7f1b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt @@ -0,0 +1,2 @@ +model object +table t diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt new file mode 100644 index 000000000..cd0b9f44b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt @@ -0,0 +1 @@ +{"model":"table","object":"t"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt new file mode 100644 index 000000000..6846e74c4 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt @@ -0,0 +1 @@ +Error: duplicate column name after UTF-8 replacement: "bad�" diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/006.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/006.stdout.txt new file mode 100644 index 000000000..f5f490038 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/006.stdout.txt @@ -0,0 +1,2 @@ +model,object +tree,root.d diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/012.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/012.stdout.txt new file mode 100644 index 000000000..74edf0911 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/012.stdout.txt @@ -0,0 +1,2 @@ +model object +tree root.d diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/018.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/018.stdout.txt new file mode 100644 index 000000000..327c6ed09 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/018.stdout.txt @@ -0,0 +1 @@ +{"model":"tree","object":"root.d"} diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/019.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/019.stdout.txt new file mode 100644 index 000000000..e5f870be9 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/019.stdout.txt @@ -0,0 +1,60 @@ +-------------------------------- TsFile Sketch -------------------------------- +file path: utf8_collision_0.tsfile +file length: 579 + + POSITION| CONTENT + -------- ------- + 0| [magic head] TsFile + 6| [version number] 4 +||||||||||||||||||||| [ChunkGroup] of root.d, num of Chunks:3 + 7| [ChunkGroup Header] + 7| [marker] 0 + 8| [deviceID] root.d size=8 + 16| [Chunk] of root.d.bad�, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 16| [Chunk Header] marker=5, measurementID=bad�, dataSize=35, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=12 + 28| [Page Header] HeaderSize:2, UncompressedSize:33, CompressedSize:33 + 30| [Page Data] Size:33 + 63| [Chunk] of root.d.bad�, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 63| [Chunk Header] marker=5, measurementID=bad�, dataSize=35, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=10 + 73| [Page Header] HeaderSize:2, UncompressedSize:33, CompressedSize:33 + 75| [Page Data] Size:33 + 108| [Chunk] of root.d.bad�, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 108| [Chunk Header] marker=5, measurementID=bad�, dataSize=35, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=10 + 118| [Page Header] HeaderSize:2, UncompressedSize:33, CompressedSize:33 + 120| [Page Data] Size:33 +||||||||||||||||||||| [ChunkGroup] of root.d ends + 170| [marker] 2 + 171| [TimeseriesMetadata] of root.d.bad�, tsDataType:INT64, sizeWithoutChunkMetadata:67, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 238| [ChunkMetadata] offset=16, size=8 + 246| [TimeseriesMetadata] of root.d.bad�, tsDataType:INT64, sizeWithoutChunkMetadata:65, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 311| [ChunkMetadata] offset=63, size=8 + 319| [TimeseriesMetadata] of root.d.bad�, tsDataType:INT64, sizeWithoutChunkMetadata:65, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 384| [ChunkMetadata] offset=108, size=8 + 392| [MetadataIndexNode] + 392| childrenCnt=1 + 393| + 408| endOffset=392 + 416| nodeType=LEAF_MEASUREMENT +||||||||||||||||||||| [TsFileMetadata] begins + 417| TableIndexRootCnt=1 + 421| [Table Name] root, size=8 + 429| [MetadataIndexNode] + 429| childrenCnt=1 + 430| + 446| endOffset=417 + 454| nodeType=LEAF_DEVICE + 455| TableSchemaCnt=0 + 459| [Meta Offset] 170 + 467| [Bloom Filter Size] bit vector byte array length=295 + 471| [Bloom Filter] , filterCapacity=256, hashFunctionSize=5 +||||||||||||||||||||| [TsFileMetadata] ends + 569| [TsFileMetadataSize] 152 + 573| [magic tail] TsFile + 579| END of TsFile +---------------------------- IndexOfTimerseriesIndex Tree ----------------------------- +root + [MetadataIndex:LEAF_DEVICE] + └──────[root.d,392] + [MetadataIndex:LEAF_MEASUREMENT] + └──────[bad�,171] +---------------------------------- TsFile Sketch End ---------------------------------- diff --git a/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/038.stdout.txt b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/038.stdout.txt new file mode 100644 index 000000000..b5ab134cb --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/038.stdout.txt @@ -0,0 +1,66 @@ +-------------------------------- TsFile Sketch -------------------------------- +file path: utf8_collision_1.tsfile +file length: 562 + + POSITION| CONTENT + -------- ------- + 0| [magic head] TsFile + 6| [version number] 4 +||||||||||||||||||||| [ChunkGroup] of root.d, num of Chunks:4 + 7| [ChunkGroup Header] + 7| [marker] 0 + 8| [deviceID] root.d size=8 + 16| [Chunk] of root.d., startTime: 1000 endTime: 1000 count: 1 + 16| [Chunk Header] marker=-123, measurementID=, dataSize=12, dataType=VECTOR, compressionType=LZ4, encodingType=TS_2DIFF, size=6 + 22| [Page Header] HeaderSize:2, UncompressedSize:24, CompressedSize:10 + 24| [Page Data] Size:10 + 34| [Chunk] of root.d.bad�, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 34| [Chunk Header] marker=69, measurementID=bad�, dataSize=15, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=12 + 46| [Page Header] HeaderSize:2, UncompressedSize:13, CompressedSize:13 + 48| [Page Data] Size:13 + 61| [Chunk] of root.d.bad�, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 61| [Chunk Header] marker=69, measurementID=bad�, dataSize=15, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=10 + 71| [Page Header] HeaderSize:2, UncompressedSize:13, CompressedSize:13 + 73| [Page Data] Size:13 + 86| [Chunk] of root.d.bad�, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 86| [Chunk Header] marker=69, measurementID=bad�, dataSize=15, dataType=INT64, compressionType=UNCOMPRESSED, encodingType=PLAIN, size=10 + 96| [Page Header] HeaderSize:2, UncompressedSize:13, CompressedSize:13 + 98| [Page Data] Size:13 +||||||||||||||||||||| [ChunkGroup] of root.d ends + 128| [marker] 2 + 129| [TimeseriesMetadata] of root.d., tsDataType:VECTOR, sizeWithoutChunkMetadata:21, startTime: 1000 endTime: 1000 count: 1 + 150| [ChunkMetadata] offset=16, size=8 + 158| [TimeseriesMetadata] of root.d.bad�, tsDataType:INT64, sizeWithoutChunkMetadata:67, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 225| [ChunkMetadata] offset=34, size=8 + 233| [TimeseriesMetadata] of root.d.bad�, tsDataType:INT64, sizeWithoutChunkMetadata:65, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 298| [ChunkMetadata] offset=61, size=8 + 306| [TimeseriesMetadata] of root.d.bad�, tsDataType:INT64, sizeWithoutChunkMetadata:65, startTime: 1000 endTime: 1000 count: 1 [minValue:42,maxValue:42,firstValue:42,lastValue:42,sumValue:42.0] + 371| [ChunkMetadata] offset=86, size=8 + 379| [MetadataIndexNode] + 379| childrenCnt=1 + 380| <, 129> + 389| endOffset=379 + 397| nodeType=LEAF_MEASUREMENT +||||||||||||||||||||| [TsFileMetadata] begins + 398| TableIndexRootCnt=1 + 402| [Table Name] root, size=8 + 410| [MetadataIndexNode] + 410| childrenCnt=1 + 411| + 427| endOffset=398 + 435| nodeType=LEAF_DEVICE + 436| TableSchemaCnt=0 + 440| [Meta Offset] 128 + 448| [Bloom Filter Size] bit vector byte array length=315 + 452| [Bloom Filter] , filterCapacity=256, hashFunctionSize=5 +||||||||||||||||||||| [TsFileMetadata] ends + 552| [TsFileMetadataSize] 154 + 556| [magic tail] TsFile + 562| END of TsFile +---------------------------- IndexOfTimerseriesIndex Tree ----------------------------- +root + [MetadataIndex:LEAF_DEVICE] + └──────[root.d,379] + [MetadataIndex:LEAF_MEASUREMENT] + └──────[,129] +---------------------------------- TsFile Sketch End ---------------------------------- diff --git a/cpp/test/tools/e2e/golden/e2e/ComplexTableFixture.CsvAnswersMatchByteForByte/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/ComplexTableFixture.CsvAnswersMatchByteForByte/001.stdout.txt new file mode 100644 index 000000000..1ed4a5f95 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/ComplexTableFixture.CsvAnswersMatchByteForByte/001.stdout.txt @@ -0,0 +1,4 @@ +time,site,rack,sensor,reading +0,\N,rack0,sensor0,\N +1,"",rack1,sensor1,1.25 +2,null,rack2,sensor2,2.5 diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/001.stdout.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/001.stdout.txt new file mode 100644 index 000000000..4fc0bf205 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/001.stdout.txt @@ -0,0 +1,4 @@ +time site note +1000 s1 line1\nline2 +2000 s2 tab\there +3000 s3 back\\slash diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/002.stdout.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/002.stdout.txt new file mode 100644 index 000000000..1d258981d --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/002.stdout.txt @@ -0,0 +1,5 @@ +time,site,note +1000,s1,"line1 +line2" +2000,s2,tab here +3000,s3,back\slash diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/003.stdout.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/003.stdout.txt new file mode 100644 index 000000000..a921d3512 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/003.stdout.txt @@ -0,0 +1,3 @@ +{"time":"1000","site":"s1","note":"line1\nline2"} +{"time":"2000","site":"s2","note":"tab\there"} +{"time":"3000","site":"s3","note":"back\\slash"} diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt new file mode 100644 index 000000000..8dc41acfa --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt @@ -0,0 +1 @@ +Error: no device found in file diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/023.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/023.stderr.txt new file mode 100644 index 000000000..b5f3ccec8 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/023.stderr.txt @@ -0,0 +1 @@ +Error: device 'root.empty.d1' does not exist diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt new file mode 100644 index 000000000..61226966b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt @@ -0,0 +1 @@ +Error: cannot open tsfile_cli_missing_input.tsfile: cannot open file (code 28) diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt new file mode 100644 index 000000000..6b99ac8dd --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt @@ -0,0 +1 @@ +Error: cannot open tsfile_cli_damaged_input.tsfile: file is corrupted (code 35) diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt new file mode 100644 index 000000000..61d1ae03a --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt @@ -0,0 +1 @@ +Error: cannot open tsfile_cli_empty_tree_353.tsfile: unsupported TsFile format version (code 56) diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt new file mode 100644 index 000000000..6abf84f65 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt @@ -0,0 +1 @@ +Error: cannot open .: invalid path (code 37) diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt new file mode 100644 index 000000000..32b2ce953 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt @@ -0,0 +1 @@ +Error: cannot open tsfile_cli_fifo_input_354.tsfile: invalid path (code 37) diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001._manifest.json.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001._manifest.json.txt new file mode 100644 index 000000000..9c6a56687 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001._manifest.json.txt @@ -0,0 +1,6 @@ +{ + "complete": false, + "files": [ + {"file":"0001.csv","model":"table","object":"sensors_a","type":"csv","rows":"1"} + ] +} diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001.stderr.txt new file mode 100644 index 000000000..8dc48aaff --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001.stderr.txt @@ -0,0 +1 @@ +Error: failed to read rows: file is corrupted diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt new file mode 100644 index 000000000..318f1bfef --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt @@ -0,0 +1 @@ +Error: input TsFile must be a pure tree-model or pure table-model file diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/002.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/002.stderr.txt new file mode 100644 index 000000000..59392747c --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/002.stderr.txt @@ -0,0 +1 @@ +Error: timestamps must be strictly increasing per device (line 3: 1000 <= previous 2000) diff --git a/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/006.stderr.txt b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/006.stderr.txt new file mode 100644 index 000000000..63d38bbc7 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/006.stderr.txt @@ -0,0 +1 @@ +Error: expected 3 fields, got 1 (line 2) diff --git a/cpp/test/tools/e2e/golden/e2e/RunCliTest.CommandHelpMustAppearByItself/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/RunCliTest.CommandHelpMustAppearByItself/001.stderr.txt new file mode 100644 index 000000000..975fd568f --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/RunCliTest.CommandHelpMustAppearByItself/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --help must appear by itself or immediately after a command +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/RunCliTest.LeadingOptionBeforeCommandIsClearError/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/RunCliTest.LeadingOptionBeforeCommandIsClearError/001.stderr.txt new file mode 100644 index 000000000..3fbfe8109 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/RunCliTest.LeadingOptionBeforeCommandIsClearError/001.stderr.txt @@ -0,0 +1,27 @@ +Error: the command must come before options (got option '-f'); run with --help for usage +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/RunCliTest.SeedOnCatIsUsageError/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/RunCliTest.SeedOnCatIsUsageError/001.stderr.txt new file mode 100644 index 000000000..866d1b574 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/RunCliTest.SeedOnCatIsUsageError/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --seed is not supported by tsfile-cli +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/RunCliTest.SelectIsNoLongerKnownCommand/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/RunCliTest.SelectIsNoLongerKnownCommand/001.stderr.txt new file mode 100644 index 000000000..4a81e717b --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/RunCliTest.SelectIsNoLongerKnownCommand/001.stderr.txt @@ -0,0 +1,27 @@ +Unknown command: select +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/RunCliTest.TopLevelHelpMustAppearByItself/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/RunCliTest.TopLevelHelpMustAppearByItself/001.stderr.txt new file mode 100644 index 000000000..485c49620 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/RunCliTest.TopLevelHelpMustAppearByItself/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --help must appear by itself +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/RunCliTest.UnknownCommandIsUsageError/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/RunCliTest.UnknownCommandIsUsageError/001.stderr.txt new file mode 100644 index 000000000..968e9fe44 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/RunCliTest.UnknownCommandIsUsageError/001.stderr.txt @@ -0,0 +1,27 @@ +Unknown command: frobnicate +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/RunCliTest.VersionMustAppearByItself/001.stderr.txt b/cpp/test/tools/e2e/golden/e2e/RunCliTest.VersionMustAppearByItself/001.stderr.txt new file mode 100644 index 000000000..4d302a7fc --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/RunCliTest.VersionMustAppearByItself/001.stderr.txt @@ -0,0 +1,27 @@ +Error: --version must appear by itself +Usage: tsfile-cli [options] +Commands: ls schema meta stats count sketch head cat export write +Formats: table ndjson csv +Common read options: + -f, --format table|ndjson|csv output format (default: table) + -d, --device select one tree-model device + -t, --table select one table-model table + -m, --measurements repeat for FIELD projection + -n, --limit N max rows for head/cat + --offset N skip N matching rows + --start inclusive lower time bound + --end inclusive upper time bound +Export options: + -o, --output single-object export target + --type table|ndjson|csv export file type + --force replace a regular output file +Write options: + --table target table name + --tag STRING declare a TAG column + --field declare a FIELD column + -i, --input input CSV file + --stdin read CSV from stdin + -o, --output destination .tsfile + -v, --verbose report write details to stderr + -h, --help print help + --version print version diff --git a/cpp/test/tools/e2e/golden/e2e/WriteCommand.SuccessfulWriteHasExactSilentOutput/002.roundtrip.txt b/cpp/test/tools/e2e/golden/e2e/WriteCommand.SuccessfulWriteHasExactSilentOutput/002.roundtrip.txt new file mode 100644 index 000000000..d2f954512 --- /dev/null +++ b/cpp/test/tools/e2e/golden/e2e/WriteCommand.SuccessfulWriteHasExactSilentOutput/002.roundtrip.txt @@ -0,0 +1,2 @@ +{"time":"0","id":"dev","value":"10"} +{"time":"1","id":"dev","value":"20"} diff --git a/cpp/test/tools/golden/empty_table_cat_ndjson.txt b/cpp/test/tools/e2e/golden/empty.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_cat_ndjson.txt rename to cpp/test/tools/e2e/golden/empty.txt diff --git a/cpp/test/tools/golden/empty_field_cat_csv.txt b/cpp/test/tools/e2e/golden/empty_field_cat_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_cat_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_cat_csv.txt diff --git a/cpp/test/tools/golden/empty_field_cat_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_cat_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_cat_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_cat_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_cat_table.txt b/cpp/test/tools/e2e/golden/empty_field_cat_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_cat_table.txt rename to cpp/test/tools/e2e/golden/empty_field_cat_table.txt diff --git a/cpp/test/tools/golden/empty_field_count_csv.txt b/cpp/test/tools/e2e/golden/empty_field_count_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_count_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_count_csv.txt diff --git a/cpp/test/tools/golden/empty_field_count_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_count_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_count_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_count_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_count_table.txt b/cpp/test/tools/e2e/golden/empty_field_count_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_count_table.txt rename to cpp/test/tools/e2e/golden/empty_field_count_table.txt diff --git a/cpp/test/tools/golden/empty_field_export_csv.txt b/cpp/test/tools/e2e/golden/empty_field_export_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_export_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_export_csv.txt diff --git a/cpp/test/tools/golden/empty_field_export_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_export_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_export_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_export_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_export_table.txt b/cpp/test/tools/e2e/golden/empty_field_export_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_export_table.txt rename to cpp/test/tools/e2e/golden/empty_field_export_table.txt diff --git a/cpp/test/tools/golden/empty_field_head_csv.txt b/cpp/test/tools/e2e/golden/empty_field_head_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_head_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_head_csv.txt diff --git a/cpp/test/tools/golden/empty_field_head_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_head_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_head_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_head_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_head_table.txt b/cpp/test/tools/e2e/golden/empty_field_head_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_head_table.txt rename to cpp/test/tools/e2e/golden/empty_field_head_table.txt diff --git a/cpp/test/tools/golden/empty_field_ls_csv.txt b/cpp/test/tools/e2e/golden/empty_field_ls_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_ls_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_ls_csv.txt diff --git a/cpp/test/tools/golden/empty_field_ls_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_ls_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_ls_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_ls_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_ls_table.txt b/cpp/test/tools/e2e/golden/empty_field_ls_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_ls_table.txt rename to cpp/test/tools/e2e/golden/empty_field_ls_table.txt diff --git a/cpp/test/tools/golden/empty_field_meta_csv.txt b/cpp/test/tools/e2e/golden/empty_field_meta_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_meta_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_meta_csv.txt diff --git a/cpp/test/tools/golden/empty_field_meta_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_meta_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_meta_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_meta_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_meta_table.txt b/cpp/test/tools/e2e/golden/empty_field_meta_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_meta_table.txt rename to cpp/test/tools/e2e/golden/empty_field_meta_table.txt diff --git a/cpp/test/tools/golden/empty_field_schema_csv.txt b/cpp/test/tools/e2e/golden/empty_field_schema_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_schema_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_schema_csv.txt diff --git a/cpp/test/tools/golden/empty_field_schema_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_schema_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_schema_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_schema_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_schema_table.txt b/cpp/test/tools/e2e/golden/empty_field_schema_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_schema_table.txt rename to cpp/test/tools/e2e/golden/empty_field_schema_table.txt diff --git a/cpp/test/tools/golden/empty_field_sketch.txt b/cpp/test/tools/e2e/golden/empty_field_sketch.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_sketch.txt rename to cpp/test/tools/e2e/golden/empty_field_sketch.txt diff --git a/cpp/test/tools/golden/empty_field_stats_csv.txt b/cpp/test/tools/e2e/golden/empty_field_stats_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_stats_csv.txt rename to cpp/test/tools/e2e/golden/empty_field_stats_csv.txt diff --git a/cpp/test/tools/golden/empty_field_stats_ndjson.txt b/cpp/test/tools/e2e/golden/empty_field_stats_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_stats_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_field_stats_ndjson.txt diff --git a/cpp/test/tools/golden/empty_field_stats_table.txt b/cpp/test/tools/e2e/golden/empty_field_stats_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_field_stats_table.txt rename to cpp/test/tools/e2e/golden/empty_field_stats_table.txt diff --git a/cpp/test/tools/golden/empty_table_cat_csv.txt b/cpp/test/tools/e2e/golden/empty_table_cat_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_cat_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_cat_csv.txt diff --git a/cpp/test/tools/golden/empty_table_export_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_cat_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_export_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_cat_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_cat_table.txt b/cpp/test/tools/e2e/golden/empty_table_cat_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_cat_table.txt rename to cpp/test/tools/e2e/golden/empty_table_cat_table.txt diff --git a/cpp/test/tools/golden/empty_table_count_csv.txt b/cpp/test/tools/e2e/golden/empty_table_count_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_count_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_count_csv.txt diff --git a/cpp/test/tools/golden/empty_table_count_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_count_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_count_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_count_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_count_table.txt b/cpp/test/tools/e2e/golden/empty_table_count_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_count_table.txt rename to cpp/test/tools/e2e/golden/empty_table_count_table.txt diff --git a/cpp/test/tools/golden/empty_table_export_csv.txt b/cpp/test/tools/e2e/golden/empty_table_export_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_export_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_export_csv.txt diff --git a/cpp/test/tools/golden/empty_table_head_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_export_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_head_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_export_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_export_table.txt b/cpp/test/tools/e2e/golden/empty_table_export_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_export_table.txt rename to cpp/test/tools/e2e/golden/empty_table_export_table.txt diff --git a/cpp/test/tools/golden/empty_table_head_csv.txt b/cpp/test/tools/e2e/golden/empty_table_head_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_head_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_head_csv.txt diff --git a/cpp/test/tools/golden/empty_table_stats_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_head_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_stats_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_head_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_head_table.txt b/cpp/test/tools/e2e/golden/empty_table_head_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_head_table.txt rename to cpp/test/tools/e2e/golden/empty_table_head_table.txt diff --git a/cpp/test/tools/golden/empty_table_ls_csv.txt b/cpp/test/tools/e2e/golden/empty_table_ls_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_ls_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_ls_csv.txt diff --git a/cpp/test/tools/golden/empty_table_ls_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_ls_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_ls_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_ls_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_ls_table.txt b/cpp/test/tools/e2e/golden/empty_table_ls_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_ls_table.txt rename to cpp/test/tools/e2e/golden/empty_table_ls_table.txt diff --git a/cpp/test/tools/golden/empty_table_meta_csv.txt b/cpp/test/tools/e2e/golden/empty_table_meta_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_meta_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_meta_csv.txt diff --git a/cpp/test/tools/golden/empty_table_meta_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_meta_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_meta_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_meta_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_meta_table.txt b/cpp/test/tools/e2e/golden/empty_table_meta_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_meta_table.txt rename to cpp/test/tools/e2e/golden/empty_table_meta_table.txt diff --git a/cpp/test/tools/golden/empty_table_schema_csv.txt b/cpp/test/tools/e2e/golden/empty_table_schema_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_schema_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_schema_csv.txt diff --git a/cpp/test/tools/golden/empty_table_schema_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_schema_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_schema_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_schema_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_schema_table.txt b/cpp/test/tools/e2e/golden/empty_table_schema_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_schema_table.txt rename to cpp/test/tools/e2e/golden/empty_table_schema_table.txt diff --git a/cpp/test/tools/golden/empty_table_sketch.txt b/cpp/test/tools/e2e/golden/empty_table_sketch.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_sketch.txt rename to cpp/test/tools/e2e/golden/empty_table_sketch.txt diff --git a/cpp/test/tools/golden/empty_table_stats_csv.txt b/cpp/test/tools/e2e/golden/empty_table_stats_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_stats_csv.txt rename to cpp/test/tools/e2e/golden/empty_table_stats_csv.txt diff --git a/cpp/test/tools/golden/empty_tree_count_ndjson.txt b/cpp/test/tools/e2e/golden/empty_table_stats_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_count_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_table_stats_ndjson.txt diff --git a/cpp/test/tools/golden/empty_table_stats_table.txt b/cpp/test/tools/e2e/golden/empty_table_stats_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_table_stats_table.txt rename to cpp/test/tools/e2e/golden/empty_table_stats_table.txt diff --git a/cpp/test/tools/golden/empty_tree_count_csv.txt b/cpp/test/tools/e2e/golden/empty_tree_count_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_count_csv.txt rename to cpp/test/tools/e2e/golden/empty_tree_count_csv.txt diff --git a/cpp/test/tools/golden/empty_tree_ls_ndjson.txt b/cpp/test/tools/e2e/golden/empty_tree_count_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_ls_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_tree_count_ndjson.txt diff --git a/cpp/test/tools/golden/empty_tree_count_table.txt b/cpp/test/tools/e2e/golden/empty_tree_count_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_count_table.txt rename to cpp/test/tools/e2e/golden/empty_tree_count_table.txt diff --git a/cpp/test/tools/golden/empty_tree_ls_csv.txt b/cpp/test/tools/e2e/golden/empty_tree_ls_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_ls_csv.txt rename to cpp/test/tools/e2e/golden/empty_tree_ls_csv.txt diff --git a/cpp/test/tools/golden/empty_tree_schema_ndjson.txt b/cpp/test/tools/e2e/golden/empty_tree_ls_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_schema_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_tree_ls_ndjson.txt diff --git a/cpp/test/tools/golden/empty_tree_ls_table.txt b/cpp/test/tools/e2e/golden/empty_tree_ls_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_ls_table.txt rename to cpp/test/tools/e2e/golden/empty_tree_ls_table.txt diff --git a/cpp/test/tools/golden/empty_tree_meta_csv.txt b/cpp/test/tools/e2e/golden/empty_tree_meta_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_meta_csv.txt rename to cpp/test/tools/e2e/golden/empty_tree_meta_csv.txt diff --git a/cpp/test/tools/golden/empty_tree_meta_ndjson.txt b/cpp/test/tools/e2e/golden/empty_tree_meta_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_meta_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_tree_meta_ndjson.txt diff --git a/cpp/test/tools/golden/empty_tree_meta_table.txt b/cpp/test/tools/e2e/golden/empty_tree_meta_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_meta_table.txt rename to cpp/test/tools/e2e/golden/empty_tree_meta_table.txt diff --git a/cpp/test/tools/golden/empty_tree_schema_csv.txt b/cpp/test/tools/e2e/golden/empty_tree_schema_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_schema_csv.txt rename to cpp/test/tools/e2e/golden/empty_tree_schema_csv.txt diff --git a/cpp/test/tools/golden/empty_tree_stats_ndjson.txt b/cpp/test/tools/e2e/golden/empty_tree_schema_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_stats_ndjson.txt rename to cpp/test/tools/e2e/golden/empty_tree_schema_ndjson.txt diff --git a/cpp/test/tools/golden/empty_tree_schema_table.txt b/cpp/test/tools/e2e/golden/empty_tree_schema_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_schema_table.txt rename to cpp/test/tools/e2e/golden/empty_tree_schema_table.txt diff --git a/cpp/test/tools/golden/empty_tree_sketch.txt b/cpp/test/tools/e2e/golden/empty_tree_sketch.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_sketch.txt rename to cpp/test/tools/e2e/golden/empty_tree_sketch.txt diff --git a/cpp/test/tools/golden/empty_tree_stats_csv.txt b/cpp/test/tools/e2e/golden/empty_tree_stats_csv.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_stats_csv.txt rename to cpp/test/tools/e2e/golden/empty_tree_stats_csv.txt diff --git a/cpp/test/tools/e2e/golden/empty_tree_stats_ndjson.txt b/cpp/test/tools/e2e/golden/empty_tree_stats_ndjson.txt new file mode 100644 index 000000000..e69de29bb diff --git a/cpp/test/tools/golden/empty_tree_stats_table.txt b/cpp/test/tools/e2e/golden/empty_tree_stats_table.txt similarity index 100% rename from cpp/test/tools/golden/empty_tree_stats_table.txt rename to cpp/test/tools/e2e/golden/empty_tree_stats_table.txt diff --git a/cpp/test/tools/e2e/golden/stdin_roundtrip.txt b/cpp/test/tools/e2e/golden/stdin_roundtrip.txt new file mode 100644 index 000000000..40e8ab954 --- /dev/null +++ b/cpp/test/tools/e2e/golden/stdin_roundtrip.txt @@ -0,0 +1,3 @@ +time,id,value +0,dev,10 +1,dev,20 diff --git a/cpp/test/tools/golden/table_cat_csv.txt b/cpp/test/tools/e2e/golden/table_cat_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_cat_csv.txt rename to cpp/test/tools/e2e/golden/table_cat_csv.txt diff --git a/cpp/test/tools/golden/table_cat_ndjson.txt b/cpp/test/tools/e2e/golden/table_cat_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_cat_ndjson.txt rename to cpp/test/tools/e2e/golden/table_cat_ndjson.txt diff --git a/cpp/test/tools/golden/table_cat_table.txt b/cpp/test/tools/e2e/golden/table_cat_table.txt similarity index 100% rename from cpp/test/tools/golden/table_cat_table.txt rename to cpp/test/tools/e2e/golden/table_cat_table.txt diff --git a/cpp/test/tools/golden/table_count_csv.txt b/cpp/test/tools/e2e/golden/table_count_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_count_csv.txt rename to cpp/test/tools/e2e/golden/table_count_csv.txt diff --git a/cpp/test/tools/golden/table_count_ndjson.txt b/cpp/test/tools/e2e/golden/table_count_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_count_ndjson.txt rename to cpp/test/tools/e2e/golden/table_count_ndjson.txt diff --git a/cpp/test/tools/golden/table_count_table.txt b/cpp/test/tools/e2e/golden/table_count_table.txt similarity index 100% rename from cpp/test/tools/golden/table_count_table.txt rename to cpp/test/tools/e2e/golden/table_count_table.txt diff --git a/cpp/test/tools/golden/table_export_csv.txt b/cpp/test/tools/e2e/golden/table_export_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_export_csv.txt rename to cpp/test/tools/e2e/golden/table_export_csv.txt diff --git a/cpp/test/tools/golden/table_export_ndjson.txt b/cpp/test/tools/e2e/golden/table_export_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_export_ndjson.txt rename to cpp/test/tools/e2e/golden/table_export_ndjson.txt diff --git a/cpp/test/tools/golden/table_export_table.txt b/cpp/test/tools/e2e/golden/table_export_table.txt similarity index 100% rename from cpp/test/tools/golden/table_export_table.txt rename to cpp/test/tools/e2e/golden/table_export_table.txt diff --git a/cpp/test/tools/golden/table_head_csv.txt b/cpp/test/tools/e2e/golden/table_head_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_head_csv.txt rename to cpp/test/tools/e2e/golden/table_head_csv.txt diff --git a/cpp/test/tools/golden/table_head_ndjson.txt b/cpp/test/tools/e2e/golden/table_head_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_head_ndjson.txt rename to cpp/test/tools/e2e/golden/table_head_ndjson.txt diff --git a/cpp/test/tools/golden/table_head_table.txt b/cpp/test/tools/e2e/golden/table_head_table.txt similarity index 100% rename from cpp/test/tools/golden/table_head_table.txt rename to cpp/test/tools/e2e/golden/table_head_table.txt diff --git a/cpp/test/tools/golden/table_ls_csv.txt b/cpp/test/tools/e2e/golden/table_ls_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_ls_csv.txt rename to cpp/test/tools/e2e/golden/table_ls_csv.txt diff --git a/cpp/test/tools/golden/table_ls_ndjson.txt b/cpp/test/tools/e2e/golden/table_ls_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_ls_ndjson.txt rename to cpp/test/tools/e2e/golden/table_ls_ndjson.txt diff --git a/cpp/test/tools/golden/table_ls_table.txt b/cpp/test/tools/e2e/golden/table_ls_table.txt similarity index 100% rename from cpp/test/tools/golden/table_ls_table.txt rename to cpp/test/tools/e2e/golden/table_ls_table.txt diff --git a/cpp/test/tools/golden/table_meta_csv.txt b/cpp/test/tools/e2e/golden/table_meta_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_meta_csv.txt rename to cpp/test/tools/e2e/golden/table_meta_csv.txt diff --git a/cpp/test/tools/golden/table_meta_ndjson.txt b/cpp/test/tools/e2e/golden/table_meta_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_meta_ndjson.txt rename to cpp/test/tools/e2e/golden/table_meta_ndjson.txt diff --git a/cpp/test/tools/golden/table_meta_table.txt b/cpp/test/tools/e2e/golden/table_meta_table.txt similarity index 100% rename from cpp/test/tools/golden/table_meta_table.txt rename to cpp/test/tools/e2e/golden/table_meta_table.txt diff --git a/cpp/test/tools/golden/table_schema_csv.txt b/cpp/test/tools/e2e/golden/table_schema_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_schema_csv.txt rename to cpp/test/tools/e2e/golden/table_schema_csv.txt diff --git a/cpp/test/tools/golden/table_schema_ndjson.txt b/cpp/test/tools/e2e/golden/table_schema_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_schema_ndjson.txt rename to cpp/test/tools/e2e/golden/table_schema_ndjson.txt diff --git a/cpp/test/tools/golden/table_schema_table.txt b/cpp/test/tools/e2e/golden/table_schema_table.txt similarity index 100% rename from cpp/test/tools/golden/table_schema_table.txt rename to cpp/test/tools/e2e/golden/table_schema_table.txt diff --git a/cpp/test/tools/golden/table_sketch.txt b/cpp/test/tools/e2e/golden/table_sketch.txt similarity index 100% rename from cpp/test/tools/golden/table_sketch.txt rename to cpp/test/tools/e2e/golden/table_sketch.txt diff --git a/cpp/test/tools/golden/table_stats_csv.txt b/cpp/test/tools/e2e/golden/table_stats_csv.txt similarity index 100% rename from cpp/test/tools/golden/table_stats_csv.txt rename to cpp/test/tools/e2e/golden/table_stats_csv.txt diff --git a/cpp/test/tools/golden/table_stats_ndjson.txt b/cpp/test/tools/e2e/golden/table_stats_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/table_stats_ndjson.txt rename to cpp/test/tools/e2e/golden/table_stats_ndjson.txt diff --git a/cpp/test/tools/golden/table_stats_table.txt b/cpp/test/tools/e2e/golden/table_stats_table.txt similarity index 100% rename from cpp/test/tools/golden/table_stats_table.txt rename to cpp/test/tools/e2e/golden/table_stats_table.txt diff --git a/cpp/test/tools/golden/tree_cat_csv.txt b/cpp/test/tools/e2e/golden/tree_cat_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_cat_csv.txt rename to cpp/test/tools/e2e/golden/tree_cat_csv.txt diff --git a/cpp/test/tools/golden/tree_cat_ndjson.txt b/cpp/test/tools/e2e/golden/tree_cat_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_cat_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_cat_ndjson.txt diff --git a/cpp/test/tools/golden/tree_cat_table.txt b/cpp/test/tools/e2e/golden/tree_cat_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_cat_table.txt rename to cpp/test/tools/e2e/golden/tree_cat_table.txt diff --git a/cpp/test/tools/golden/tree_count_csv.txt b/cpp/test/tools/e2e/golden/tree_count_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_count_csv.txt rename to cpp/test/tools/e2e/golden/tree_count_csv.txt diff --git a/cpp/test/tools/golden/tree_count_ndjson.txt b/cpp/test/tools/e2e/golden/tree_count_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_count_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_count_ndjson.txt diff --git a/cpp/test/tools/golden/tree_count_table.txt b/cpp/test/tools/e2e/golden/tree_count_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_count_table.txt rename to cpp/test/tools/e2e/golden/tree_count_table.txt diff --git a/cpp/test/tools/golden/tree_export_csv.txt b/cpp/test/tools/e2e/golden/tree_export_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_export_csv.txt rename to cpp/test/tools/e2e/golden/tree_export_csv.txt diff --git a/cpp/test/tools/golden/tree_export_ndjson.txt b/cpp/test/tools/e2e/golden/tree_export_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_export_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_export_ndjson.txt diff --git a/cpp/test/tools/golden/tree_export_table.txt b/cpp/test/tools/e2e/golden/tree_export_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_export_table.txt rename to cpp/test/tools/e2e/golden/tree_export_table.txt diff --git a/cpp/test/tools/golden/tree_head_csv.txt b/cpp/test/tools/e2e/golden/tree_head_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_head_csv.txt rename to cpp/test/tools/e2e/golden/tree_head_csv.txt diff --git a/cpp/test/tools/golden/tree_head_ndjson.txt b/cpp/test/tools/e2e/golden/tree_head_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_head_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_head_ndjson.txt diff --git a/cpp/test/tools/golden/tree_head_table.txt b/cpp/test/tools/e2e/golden/tree_head_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_head_table.txt rename to cpp/test/tools/e2e/golden/tree_head_table.txt diff --git a/cpp/test/tools/golden/tree_ls_csv.txt b/cpp/test/tools/e2e/golden/tree_ls_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_ls_csv.txt rename to cpp/test/tools/e2e/golden/tree_ls_csv.txt diff --git a/cpp/test/tools/golden/tree_ls_ndjson.txt b/cpp/test/tools/e2e/golden/tree_ls_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_ls_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_ls_ndjson.txt diff --git a/cpp/test/tools/golden/tree_ls_table.txt b/cpp/test/tools/e2e/golden/tree_ls_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_ls_table.txt rename to cpp/test/tools/e2e/golden/tree_ls_table.txt diff --git a/cpp/test/tools/golden/tree_meta_csv.txt b/cpp/test/tools/e2e/golden/tree_meta_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_meta_csv.txt rename to cpp/test/tools/e2e/golden/tree_meta_csv.txt diff --git a/cpp/test/tools/golden/tree_meta_ndjson.txt b/cpp/test/tools/e2e/golden/tree_meta_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_meta_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_meta_ndjson.txt diff --git a/cpp/test/tools/golden/tree_meta_table.txt b/cpp/test/tools/e2e/golden/tree_meta_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_meta_table.txt rename to cpp/test/tools/e2e/golden/tree_meta_table.txt diff --git a/cpp/test/tools/golden/tree_schema_csv.txt b/cpp/test/tools/e2e/golden/tree_schema_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_schema_csv.txt rename to cpp/test/tools/e2e/golden/tree_schema_csv.txt diff --git a/cpp/test/tools/golden/tree_schema_ndjson.txt b/cpp/test/tools/e2e/golden/tree_schema_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_schema_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_schema_ndjson.txt diff --git a/cpp/test/tools/golden/tree_schema_table.txt b/cpp/test/tools/e2e/golden/tree_schema_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_schema_table.txt rename to cpp/test/tools/e2e/golden/tree_schema_table.txt diff --git a/cpp/test/tools/golden/tree_sketch.txt b/cpp/test/tools/e2e/golden/tree_sketch.txt similarity index 100% rename from cpp/test/tools/golden/tree_sketch.txt rename to cpp/test/tools/e2e/golden/tree_sketch.txt diff --git a/cpp/test/tools/golden/tree_stats_csv.txt b/cpp/test/tools/e2e/golden/tree_stats_csv.txt similarity index 100% rename from cpp/test/tools/golden/tree_stats_csv.txt rename to cpp/test/tools/e2e/golden/tree_stats_csv.txt diff --git a/cpp/test/tools/golden/tree_stats_ndjson.txt b/cpp/test/tools/e2e/golden/tree_stats_ndjson.txt similarity index 100% rename from cpp/test/tools/golden/tree_stats_ndjson.txt rename to cpp/test/tools/e2e/golden/tree_stats_ndjson.txt diff --git a/cpp/test/tools/golden/tree_stats_table.txt b/cpp/test/tools/e2e/golden/tree_stats_table.txt similarity index 100% rename from cpp/test/tools/golden/tree_stats_table.txt rename to cpp/test/tools/e2e/golden/tree_stats_table.txt diff --git a/cpp/test/tools/e2e/run_cli_e2e.py b/cpp/test/tools/e2e/run_cli_e2e.py new file mode 100644 index 000000000..6a8ba6903 --- /dev/null +++ b/cpp/test/tools/e2e/run_cli_e2e.py @@ -0,0 +1,376 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +"""Run file-driven E2E cases against a built or installed tsfile-cli.""" + +import argparse +import difflib +import json +import hashlib +import os +from pathlib import Path +import re +import shutil +import stat +import subprocess +import sys +import tempfile + +HAS_POSIX = os.name != "nt" + + +def local_path(root, name): + """Resolve a suite/workspace path without allowing absolute paths or '..'.""" + path = Path(name) + if not name or path.is_absolute() or ".." in path.parts: + raise ValueError(f"Expected a relative path within {root}: {name!r}") + result = root / path + # Check parents, while allowing the leaf itself to be a symlink fixture. + if not result.parent.resolve().is_relative_to(root.resolve()): + raise ValueError(f"Path escapes {root}: {name!r}") + return result + + +def read_expected(root, name): + path = local_path(root, name) + if path.is_symlink(): + raise ValueError(f"Expected file must not be a symlink: {path}") + return path.read_bytes() + + +def remove_path(path): + if path.is_symlink() or (path.exists() and not path.is_dir()): + path.unlink() + elif path.is_dir(): + shutil.rmtree(path) + + +def prepare(root, work, actions): + for action in actions: + target = local_path(work, action["path"]) + remove_path(target) + kind = action["type"] + if kind == "absent": + continue + target.parent.mkdir(parents=True, exist_ok=True) + if kind == "file": + target.write_bytes(read_expected(root, action["source"])) + elif kind == "directory": + target.mkdir(exist_ok=True) + elif kind == "symlink": + local_path(work, str(Path(action["path"]).parent / action["target"])) + target.symlink_to(action["target"]) + elif kind == "fifo": + os.mkfifo(target) + else: + raise ValueError(f"Unknown preparation type: {kind}") + + +def tree_state(work): + result = {} + for directory, dirs, files in os.walk(work, followlinks=False): + for name in dirs + files: + path = Path(directory) / name + mode = path.lstat().st_mode + if stat.S_ISLNK(mode): + kind = "symlink" + elif stat.S_ISDIR(mode): + kind = "directory" + elif stat.S_ISFIFO(mode): + kind = "fifo" + elif stat.S_ISREG(mode): + kind = "file" + else: + kind = "special" + result[path.relative_to(work).as_posix()] = kind + return result + + +def compare(expected, actual, label, differences): + if expected == actual: + return + differences.append(f"{label}: output differs\n") + expected_lines = expected.decode("utf-8", errors="backslashreplace").splitlines( + True + ) + actual_lines = actual.decode("utf-8", errors="backslashreplace").splitlines(True) + differences.extend( + difflib.unified_diff(expected_lines, actual_lines, "expected", "actual") + ) + if expected_lines == actual_lines: + differences.append(f"expected bytes: {expected!r}\nactual bytes: {actual!r}\n") + + +def version_output(data, expected_version, require_concrete_commit=False): + match = re.fullmatch( + rb"tsfile-cli (\S+) tsfile=(\S+) commit=([0-9a-f]{40}|unknown) " + rb"built=(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)\n", + data, + ) + if not match or match[1] != match[2]: + raise ValueError( + "CLI version output has missing or inconsistent build metadata" + ) + if require_concrete_commit and match[3] == b"unknown": + raise ValueError("CLI commit metadata must be concrete for this case") + if expected_version and match[1].decode() != expected_version: + raise ValueError( + f"Expected CLI version {expected_version}, got {match[1].decode()}" + ) + return b"tsfile-cli tsfile= commit= built=\n" + + +def run_case(case, root, output, executable, timeout, expected_version): + destination = local_path(output, case["id"]) + destination.mkdir(parents=True) + work = destination / "work" + work.mkdir() + results = [] + for index, step in enumerate(case["steps"], 1): + prefix = destination / f"{index:03d}" + differences = [] + record = {"args": step["args"], "expected_exit_code": step["exit_code"]} + try: + actions = step.get("prepare", []) + skip_reason = step.get("posix_only") if not HAS_POSIX else None + if skip_reason: + # Preserve ordinary fixture setup for later supported commands. + # Unsupported special files are never created on Windows. + actions = [a for a in actions if a["type"] not in ("fifo", "symlink")] + prepare(root, work, actions) + if skip_reason: + results.append( + {"args": step["args"], "passed": True, "skipped": skip_reason} + ) + continue + env = dict(os.environ, LC_ALL="C", LANG="C", TZ="UTC") + expected_files = {} + for name, kind in tree_state(work).items(): + info = {"type": kind} + target = local_path(work, name) + if kind == "file": + info["contents"] = target.read_bytes() + elif kind == "symlink": + info["target"] = os.readlink(target) + expected_files[name] = info + for name, info in step.get("files", {}).items(): + local_path(work, name) + if info["type"] == "absent": + for existing in list(expected_files): + if existing == name or existing.startswith(name + "/"): + del expected_files[existing] + else: + expected_files[name] = info + stdin_data = read_expected(root, step["stdin"]) if "stdin" in step else b"" + with prefix.with_suffix(".stdout").open("wb") as out: + with prefix.with_suffix(".stderr").open("wb") as err: + completed = subprocess.run( + [str(executable), *step["args"]], + cwd=work, + env=env, + input=stdin_data, + stdout=out, + stderr=err, + timeout=timeout, + check=False, + ) + record["actual_exit_code"] = completed.returncode + prefix.with_suffix(".exit_code").write_text(f"{completed.returncode}\n") + if completed.returncode != step["exit_code"]: + differences.append( + f"exit code: expected {step['exit_code']}, actual {completed.returncode}\n" + ) + stdout = prefix.with_suffix(".stdout").read_bytes() + stderr = prefix.with_suffix(".stderr").read_bytes() + if step.get("stdout_format") == "version": + stdout = version_output( + stdout, expected_version, step.get("require_concrete_commit", False) + ) + compare(read_expected(root, step["stdout"]), stdout, "stdout", differences) + expected_stderr = read_expected(root, step["stderr"]) + # tools_main switches redirected stdout to binary mode on Windows, + # while stderr keeps the CRT's native text-mode newlines. + if os.name == "nt": + expected_stderr = expected_stderr.replace(b"\n", b"\r\n") + compare(expected_stderr, stderr, "stderr", differences) + actual_files = tree_state(work) + expected_kinds = { + name: info["type"] for name, info in expected_files.items() + } + if expected_kinds != actual_files: + differences.append( + f"filesystem: expected {expected_kinds!r}, actual {actual_files!r}\n" + ) + for name, info in expected_files.items(): + target = local_path(work, name) + if actual_files.get(name) != info["type"]: + continue + if "source" in info: + compare( + read_expected(root, info["source"]), + target.read_bytes(), + name, + differences, + ) + elif "contents" in info: + compare(info["contents"], target.read_bytes(), name, differences) + elif ( + info["type"] == "symlink" and os.readlink(target) != info["target"] + ): + differences.append(f"{name}: symlink target differs\n") + except (OSError, ValueError, subprocess.TimeoutExpired) as error: + differences.append(f"execution failed: {error}\n") + record["passed"] = not differences + if differences: + prefix.with_suffix(".diff").write_text( + "".join(differences), encoding="utf-8" + ) + results.append(record) + # Later steps may consume this command's output. Preserve this failure + # without running dependent steps against incomplete files. + if differences: + break + result = { + "id": case["id"], + "passed": all(s["passed"] for s in results), + "steps": results, + } + if all("skipped" in step for step in results): + result["skipped"] = "All steps require POSIX facilities" + return result + + +def main(argv=None): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--cli", required=True, help="Built or installed tsfile-cli executable" + ) + parser.add_argument( + "--suite", type=Path, default=Path(__file__).with_name("cases.json") + ) + parser.add_argument( + "--output-dir", + type=Path, + required=True, + help="Parent directory for retained per-run outputs and reports", + ) + parser.add_argument( + "--timeout", type=float, default=30, help="Timeout in seconds per command" + ) + parser.add_argument( + "--expected-version", help="Also require this version in --version cases" + ) + parser.add_argument( + "--case", action="append", help="Run only the named case; may be repeated" + ) + args = parser.parse_args(argv) + try: + executable = shutil.which(args.cli) + if not executable or args.timeout <= 0: + raise ValueError( + "--cli must identify an executable and --timeout must be positive" + ) + executable = Path(executable).resolve() + suite = json.loads(args.suite.read_text(encoding="utf-8")) + if suite["schema_version"] != 1 or not suite["cases"]: + raise ValueError("Expected a nonempty schema_version=1 suite") + root = args.suite.resolve().parent + cases = suite["cases"] + ids = [case["id"] for case in cases] + if len(set(ids)) != len(ids): + raise ValueError("Case IDs must be unique") + if args.case: + unknown = set(args.case) - set(ids) + if unknown: + raise ValueError(f"Unknown cases: {sorted(unknown)}") + cases = [case for case in cases if case["id"] in args.case] + for case in cases: + local_path(args.output_dir.resolve(), case["id"]) + if not case["steps"]: + raise ValueError(f"Empty case: {case['id']}") + for step in case["steps"]: + if type(step["exit_code"]) is not int or not isinstance( + step["args"], list + ): + raise ValueError(f"Invalid exit_code/args: {case['id']}") + for name in (step["stdout"], step["stderr"]): + read_expected(root, name) + args.output_dir.mkdir(parents=True, exist_ok=True) + args.output_dir = Path(tempfile.mkdtemp(prefix="run-", dir=args.output_dir)) + results = [] + for case in cases: + if os.name == "nt" and case.get("posix_only"): + results.append({"id": case["id"], "skipped": case["posix_only"]}) + print(f"SKIP {case['id']}: {case['posix_only']}") + continue + result = run_case( + case, + root, + args.output_dir, + executable, + args.timeout, + args.expected_version, + ) + results.append(result) + print(f"{'PASS' if result['passed'] else 'FAIL'} {case['id']}") + failed = sum(not r.get("passed", True) for r in results) + skipped = sum("skipped" in r for r in results) + command_count = sum(len(c["steps"]) for c in cases) + executed_count = sum( + "actual_exit_code" in step + for result in results + for step in result.get("steps", []) + ) + skipped_commands = sum( + "skipped" in step for result in results for step in result.get("steps", []) + ) + asset_hash = hashlib.sha256() + for folder in ("fixtures", "golden"): + for path in sorted((root / folder).rglob("*")): + if path.is_file(): + asset_hash.update( + path.relative_to(root).as_posix().encode() + b"\0" + ) + asset_hash.update(hashlib.sha256(path.read_bytes()).digest()) + report = { + "cli_sha256": hashlib.sha256(executable.read_bytes()).hexdigest(), + "suite_sha256": hashlib.sha256(args.suite.read_bytes()).hexdigest(), + "runner_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), + "assets_sha256": asset_hash.hexdigest(), + "commands": command_count, + "executed_commands": executed_count, + "skipped_commands": skipped_commands, + "cli": str(executable), + "suite": str(args.suite.resolve()), + "failed": failed, + "skipped": skipped, + "cases": results, + } + (args.output_dir / "report.json").write_text( + json.dumps(report, indent=2) + "\n", encoding="utf-8" + ) + print( + f"{len(results) - failed - skipped} passed, {failed} failed, {skipped} skipped; results: {args.output_dir}" + ) + return 1 if failed else 0 + except (OSError, ValueError, KeyError, TypeError) as error: + print(f"Invalid E2E invocation or suite: {error}", file=sys.stderr) + return 2 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/cpp/test/tools/e2e/test_runner.py b/cpp/test/tools/e2e/test_runner.py new file mode 100644 index 000000000..69383ea76 --- /dev/null +++ b/cpp/test/tools/e2e/test_runner.py @@ -0,0 +1,226 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +"""Exercise runner failures with real child processes, without a TsFile build.""" + +import json +import os +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest +from unittest import mock + +import run_cli_e2e + + +class RunnerTest(unittest.TestCase): + def setUp(self): + self.temporary = tempfile.TemporaryDirectory() + self.addCleanup(self.temporary.cleanup) + self.root = Path(self.temporary.name) + (self.root / "empty.txt").write_bytes(b"") + self.step = { + "args": ["-c", "pass"], + "exit_code": 0, + "stdout": "empty.txt", + "stderr": "empty.txt", + "files": {}, + } + + def run_suite(self, steps=None, **options): + suite = { + "schema_version": 1, + "cases": [{"id": "example", "steps": steps or [self.step]}], + } + (self.root / "cases.json").write_text(json.dumps(suite)) + command = [ + sys.executable, + str(Path(__file__).with_name("run_cli_e2e.py")), + "--cli", + sys.executable, + "--suite", + str(self.root / "cases.json"), + "--output-dir", + str(self.root / "results"), + ] + for key, value in options.items(): + command.extend(["--" + key.replace("_", "-"), str(value)]) + result = subprocess.run(command, capture_output=True, timeout=15) + reports = list((self.root / "results").glob("run-*/report.json")) + report = json.loads(reports[-1].read_text()) if reports else None + return result, report + + def test_wrong_exit_code_fails_even_with_identical_empty_files(self): + self.step["args"] = ["-c", "raise SystemExit(7)"] + result, report = self.run_suite() + self.assertEqual(result.returncode, 1) + self.assertEqual(report["cases"][0]["steps"][0]["actual_exit_code"], 7) + self.assertIn( + "expected 0, actual 7", + next((self.root / "results").rglob("*.diff")).read_text(), + ) + + def test_expected_nonzero_exit_code_passes(self): + self.step.update(args=["-c", "raise SystemExit(2)"], exit_code=2) + result, report = self.run_suite() + self.assertEqual(result.returncode, 0, result.stderr) + self.assertEqual(report["failed"], 0) + + def test_stdout_and_stderr_are_checked_independently(self): + for stream in ("stdout", "stderr"): + with self.subTest(stream=stream): + self.step["args"] = [ + "-c", + f"import sys; sys.{stream}.write('unexpected')", + ] + result, report = self.run_suite() + self.assertEqual(result.returncode, 1) + self.assertEqual(report["failed"], 1) + + def test_export_content_is_checked_and_golden_is_unchanged(self): + (self.root / "expected.txt").write_bytes(b"expected\n") + self.step["args"] = [ + "-c", + "from pathlib import Path; Path('export.csv').write_bytes(b'wrong\\n')", + ] + self.step["files"] = {"export.csv": {"type": "file", "source": "expected.txt"}} + result, _ = self.run_suite() + self.assertEqual(result.returncode, 1) + self.assertEqual((self.root / "expected.txt").read_bytes(), b"expected\n") + + def test_missing_or_unexpected_files_fail(self): + self.step["files"] = {"missing.csv": {"type": "file"}} + result, _ = self.run_suite() + self.assertEqual(result.returncode, 1) + self.step["files"] = {} + self.step["args"] = ["-c", "from pathlib import Path; Path('extra').touch()"] + result, _ = self.run_suite() + self.assertEqual(result.returncode, 1) + + def test_steps_share_generated_files_and_stdin_is_preserved(self): + (self.root / "input.txt").write_bytes(b"a\r\nb\n") + self.step.update( + args=[ + "-c", + "import sys; from pathlib import Path; Path('data').write_bytes(sys.stdin.buffer.read())", + ], + stdin="input.txt", + files={"data": {"type": "file", "source": "input.txt"}}, + ) + second = dict( + self.step, + args=[ + "-c", + "import sys; from pathlib import Path; sys.stdout.buffer.write(Path('data').read_bytes())", + ], + stdout="input.txt", + ) + second.pop("stdin") + result, _ = self.run_suite([self.step, second]) + self.assertEqual(result.returncode, 0, result.stderr) + + def test_timeout_fails_without_running_dependent_steps(self): + self.step["args"] = ["-c", "import time; time.sleep(10)"] + result, report = self.run_suite([self.step, dict(self.step)], timeout=0.2) + self.assertEqual(result.returncode, 1) + self.assertEqual(len(report["cases"][0]["steps"]), 1) + + def test_unknown_case_is_an_error(self): + result, report = self.run_suite(case="typo") + self.assertEqual(result.returncode, 2) + self.assertIsNone(report) + + def test_expected_paths_cannot_escape_the_suite(self): + self.step["stdout"] = "../outside.txt" + result, report = self.run_suite() + self.assertEqual(result.returncode, 2) + self.assertIsNone(report) + + def test_skipped_posix_step_preserves_ordinary_setup_for_later_steps(self): + (self.root / "expected.txt").write_bytes(b"hello\n") + first = dict( + self.step, + posix_only="raw byte arguments", + prepare=[ + {"path": "input", "type": "file", "source": "expected.txt"}, + {"path": "pipe", "type": "fifo"}, + ], + ) + second = dict( + self.step, + args=[ + "-c", + "import sys; from pathlib import Path; sys.stdout.buffer.write(Path('input').read_bytes())", + ], + stdout="expected.txt", + ) + destination = self.root / "direct-results" + destination.mkdir() + with mock.patch.object(run_cli_e2e, "HAS_POSIX", False): + result = run_cli_e2e.run_case( + {"id": "skip", "steps": [first, second]}, + self.root, + destination, + Path(sys.executable), + 5, + None, + ) + self.assertTrue(result["passed"], result) + self.assertIn("skipped", result["steps"][0]) + self.assertNotIn("skipped", result["steps"][1]) + + def test_unlisted_input_changes_fail(self): + self.step.update( + prepare=[{"path": "input", "type": "file", "source": "empty.txt"}], + args=[ + "-c", + "from pathlib import Path; Path('input').write_bytes(b'changed')", + ], + ) + result, _ = self.run_suite() + self.assertEqual(result.returncode, 1) + + @unittest.skipIf(os.name == "nt", "POSIX signals") + def test_signal_exit_fails_even_with_empty_outputs(self): + self.step["args"] = [ + "-c", + "import os, signal; os.kill(os.getpid(), signal.SIGTERM)", + ] + result, report = self.run_suite() + self.assertEqual(result.returncode, 1) + self.assertLess(report["cases"][0]["steps"][0]["actual_exit_code"], 0) + + def test_concrete_commit_requirement_is_preserved(self): + data = ( + b"tsfile-cli 2.5.0 tsfile=2.5.0 commit=unknown built=2026-10-13T00:00:00Z\n" + ) + with self.assertRaises(ValueError): + run_cli_e2e.version_output(data, "2.5.0", require_concrete_commit=True) + + def test_runner_can_be_repeated_without_overwriting_previous_results(self): + for _ in range(2): + result, _ = self.run_suite() + self.assertEqual(result.returncode, 0) + self.assertEqual( + len(list((self.root / "results").glob("run-*/report.json"))), 2 + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/cpp/test/tools/model_format_e2e_test.cc b/cpp/test/tools/model_format_e2e_test.cc deleted file mode 100644 index bbd2ba7c9..000000000 --- a/cpp/test/tools/model_format_e2e_test.cc +++ /dev/null @@ -1,699 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#else -#include -#include -#endif - -#include "cli/run_cli.h" -#include "cli_test_util.h" - -#ifndef TSFILE_CPP_SOURCE_DIR -#define TSFILE_CPP_SOURCE_DIR "." -#endif - -namespace { - -struct ModelFile { - bool tree; - std::vector scope; -}; - -struct CliResult { - int code; - std::string out; - std::string err; -}; - -class BothModels : public ::testing::TestWithParam { - protected: - void SetUp() override { - char current_directory[4096]; -#ifdef _WIN32 - ASSERT_NE(_getcwd(current_directory, sizeof(current_directory)), - nullptr); -#else - ASSERT_NE(getcwd(current_directory, sizeof(current_directory)), - nullptr); -#endif - original_directory_ = current_directory; - fixture_directory_ = - tsfile_cli_test::unique_temp_path("tsfile_cli_model_work", ""); -#ifdef _WIN32 - ASSERT_EQ(_mkdir(fixture_directory_.c_str()), 0); - ASSERT_EQ(_chdir(fixture_directory_.c_str()), 0); -#else - ASSERT_EQ(mkdir(fixture_directory_.c_str(), 0700), 0); - ASSERT_EQ(chdir(fixture_directory_.c_str()), 0); -#endif - - path_ = GetParam().tree ? "tsfile_cli_complex_tree_golden.tsfile" - : "tsfile_cli_complex_table_golden.tsfile"; - const std::string fixture = - std::string(TSFILE_CPP_SOURCE_DIR) + "/test/tools/fixtures/" + - (GetParam().tree ? "complex_tree.tsfile" : "complex_table.tsfile"); - std::ifstream source(fixture.c_str(), std::ios::binary); - ASSERT_TRUE(source.good()) << "missing fixed fixture " << fixture; - std::ofstream destination(path_.c_str(), - std::ios::binary | std::ios::trunc); - ASSERT_TRUE(destination.good()) << path_; - destination << source.rdbuf(); - ASSERT_TRUE(destination.good()) << path_; - } - void TearDown() override { - std::remove(path_.c_str()); -#ifdef _WIN32 - ASSERT_EQ(_chdir(original_directory_.c_str()), 0); - ASSERT_EQ(_rmdir(fixture_directory_.c_str()), 0); -#else - ASSERT_EQ(chdir(original_directory_.c_str()), 0); - ASSERT_EQ(rmdir(fixture_directory_.c_str()), 0); -#endif - } - - std::string path_; - std::string original_directory_; - std::string fixture_directory_; -}; - -std::string run(const std::vector& args, int* code, - std::string* err = nullptr) { - std::ostringstream out; - std::ostringstream diagnostics; - *code = tsfile_cli::run_cli(args, out, diagnostics); - if (err != nullptr) *err = diagnostics.str(); - return out.str(); -} - -CliResult execute(const std::vector& args) { - std::ostringstream out; - std::ostringstream err; - int code = tsfile_cli::run_cli(args, out, err); - return {code, out.str(), err.str()}; -} - -void expect_cli_exact(const std::vector& args, int expected_code, - const std::string& expected_out, - const std::string& expected_err) { - CliResult actual = execute(args); - EXPECT_EQ(actual.code, expected_code); - EXPECT_EQ(actual.out, expected_out); - EXPECT_EQ(actual.err, expected_err); -} - -std::string read_bytes(const std::string& path) { - std::ifstream in(path.c_str(), std::ios::binary); - std::ostringstream bytes; - bytes << in.rdbuf(); - return bytes.str(); -} - -void expect_or_update_golden(const std::string& name, - const std::string& actual) { - const std::string path = std::string(TSFILE_CPP_SOURCE_DIR) + - "/test/tools/golden/" + name + ".txt"; - if (std::getenv("TSFILE_UPDATE_CLI_GOLDENS") != nullptr) { - std::ofstream out(path.c_str(), std::ios::binary | std::ios::trunc); - ASSERT_TRUE(out.good()) << path; - out.write(actual.data(), static_cast(actual.size())); - ASSERT_TRUE(out.good()) << path; - return; - } - std::ifstream expected_file(path.c_str(), std::ios::binary); - ASSERT_TRUE(expected_file.good()) - << "missing golden " << path - << "; regenerate with TSFILE_UPDATE_CLI_GOLDENS=1"; - std::ostringstream expected; - expected << expected_file.rdbuf(); - EXPECT_EQ(actual, expected.str()) << name; -} - -} // namespace - -TEST_P(BothModels, MetadataCommandsImplementAllPublicFormats) { - const std::string model = GetParam().tree ? "tree" : "table"; - const std::vector commands = {"ls", "schema", "meta", "stats", - "count"}; - const std::vector formats = {"table", "ndjson", "csv"}; - for (const auto& command : commands) { - for (const auto& format : formats) { - int code = -1; - std::string err; - std::string output = - run({command, "-f", format, path_}, &code, &err); - EXPECT_EQ(code, 0) << command << " " << format << ": " << err; - expect_or_update_golden(model + "_" + command + "_" + format, - output); - EXPECT_EQ(err, "") << command << " " << format; - } - } -} - -TEST_P(BothModels, RowCommandsPreserveRowsAcrossFormats) { - const std::string model = GetParam().tree ? "tree" : "table"; - const auto& scope = GetParam().scope; - const std::vector formats = {"table", "ndjson", "csv"}; - for (const auto& command : {std::string("head"), std::string("cat")}) { - for (const auto& format : formats) { - std::vector args = { - command, scope[0], scope[1], "-n", "2", "-f", format, path_}; - int code = -1; - std::string err; - std::string output = run(args, &code, &err); - EXPECT_EQ(code, 0) << command << " " << format << ": " << err; - expect_or_update_golden(model + "_" + command + "_" + format, - output); - EXPECT_EQ(err, "") << command << " " << format; - } - } -} - -TEST_P(BothModels, SketchAndExportSupportBothModelKinds) { - const std::string model = GetParam().tree ? "tree" : "table"; - int sketch_code = -1; - std::string sketch_err; - std::string sketch = run({"sketch", path_}, &sketch_code, &sketch_err); - EXPECT_EQ(sketch_code, 0) << sketch_err; - expect_or_update_golden(model + "_sketch", sketch); - EXPECT_EQ(sketch_err, ""); - - const auto& scope = GetParam().scope; - std::string exported = - tsfile_cli_test::unique_temp_path("tsfile_cli_model_export", ".csv"); - int export_code = -1; - std::string export_err; - std::string export_stdout = run( - {"export", scope[0], scope[1], "--type", "csv", "-o", exported, path_}, - &export_code, &export_err); - EXPECT_EQ(export_code, 0) << export_err; - EXPECT_TRUE(export_stdout.empty()); - std::ifstream exported_file(exported.c_str()); - EXPECT_TRUE(exported_file.good()); - exported_file.close(); - expect_or_update_golden(model + "_export_csv", read_bytes(exported)); - std::remove(exported.c_str()); -} - -TEST_P(BothModels, EverySuccessfulCommandHasExactGoldenOutput) { - const std::string model = GetParam().tree ? "tree" : "table"; - for (const auto& command : - {std::string("ls"), std::string("schema"), std::string("meta"), - std::string("stats"), std::string("count")}) { - for (const auto& format : {std::string("table"), std::string("ndjson"), - std::string("csv")}) { - CliResult result = execute({command, "-f", format, path_}); - EXPECT_EQ(result.code, 0) << command << " " << format; - expect_or_update_golden(model + "_" + command + "_" + format, - result.out); - EXPECT_EQ(result.err, "") << command << " " << format; - } - } - - const auto& scope = GetParam().scope; - for (const auto& command : {std::string("head"), std::string("cat")}) { - for (const auto& format : {std::string("table"), std::string("ndjson"), - std::string("csv")}) { - CliResult result = execute( - {command, scope[0], scope[1], "-n", "2", "-f", format, path_}); - EXPECT_EQ(result.code, 0) << command << " " << format; - expect_or_update_golden(model + "_" + command + "_" + format, - result.out); - EXPECT_EQ(result.err, "") << command << " " << format; - } - } - - CliResult sketch = execute({"sketch", path_}); - EXPECT_EQ(sketch.code, 0); - expect_or_update_golden(model + "_sketch", sketch.out); - EXPECT_EQ(sketch.err, ""); - - for (const auto& format : - {std::string("table"), std::string("ndjson"), std::string("csv")}) { - const std::string target = tsfile_cli_test::unique_temp_path( - "tsfile_cli_export_golden_" + model + "_" + format, ".out"); - CliResult result = execute({"export", scope[0], scope[1], "--type", - format, "-o", target, path_}); - EXPECT_EQ(result.code, 0) << format; - EXPECT_EQ(result.out, ""); - EXPECT_EQ(result.err, ""); - expect_or_update_golden(model + "_export_" + format, - read_bytes(target)); - std::remove(target.c_str()); - } -} - -TEST(ComplexTableFixture, ContainsBothTablesAndNullValues) { - const std::string path = tsfile_cli_test::write_complex_table_fixture(); - expect_cli_exact({"ls", "-f", "csv", path}, 0, - "model,object\n" - "table,table1\n" - "table,table2\n", - ""); - std::remove(path.c_str()); -} - -TEST(ComplexTableFixture, CsvAnswersMatchByteForByte) { - const std::string path = tsfile_cli_test::write_complex_table_fixture(); - expect_cli_exact({"head", "-t", "table2", "-n", "3", "-f", "csv", path}, 0, - "time,site,rack,sensor,reading\n" - "0,\\N,rack0,sensor0,\\N\n" - "1,\"\",rack1,sensor1,1.25\n" - "2,null,rack2,sensor2,2.5\n", - ""); - std::remove(path.c_str()); -} - -TEST(ComplexTreeFixture, CsvAnswersMatchByteForByte) { - const std::string path = tsfile_cli_test::write_complex_tree_fixture(); - expect_cli_exact( - {"head", "-d", "root.test.d1", "-n", "2", "-f", "csv", path}, 0, - "time,m1,m2,m3,m4,m5\n" - "0,0,0.5,value_0,0,100.5\n" - "1,1,1.5,value_1,2,101.5\n", - ""); - std::remove(path.c_str()); -} - -TEST(WriteCommand, SuccessfulWriteHasExactSilentOutput) { - const std::string input = "tsfile_cli_write_golden.csv"; - const std::string output = "tsfile_cli_write_golden.tsfile"; - std::remove(input.c_str()); - std::remove(output.c_str()); - { - std::ofstream csv(input.c_str(), std::ios::binary); - ASSERT_TRUE(csv.good()); - csv << "time,id,value\n0,dev,10\n1,dev,20\n"; - } - expect_cli_exact({"write", "--table", "written", "--tag", "id", "STRING", - "--field", "value", "INT64", "-i", input, "-o", output}, - 0, "", ""); - EXPECT_TRUE(std::ifstream(output.c_str()).good()); - std::remove(input.c_str()); - std::remove(output.c_str()); -} - -void rename_fixture(const std::string& generated, const std::string& stable) { - std::remove(stable.c_str()); - ASSERT_EQ(std::rename(generated.c_str(), stable.c_str()), 0); -} - -void expect_success_golden(const std::string& name, - const std::vector& args) { - CliResult result = execute(args); - ASSERT_EQ(result.code, 0) << name << ": " << result.err; - ASSERT_TRUE(result.err.empty()) << name << ": " << result.err; - expect_or_update_golden(name, result.out); -} - -TEST(IndependentFixtures, EmptyAndCategoryFilesHaveExactOutputs) { - struct Fixture { - std::string name; - std::string path; - std::string scope; - }; - const std::string empty_table = "tsfile_cli_empty_table_golden.tsfile"; - const std::string category_edge = "tsfile_cli_category_edge_golden.tsfile"; - const std::string empty_field = "tsfile_cli_empty_field_golden.tsfile"; - rename_fixture(tsfile_cli_test::write_empty_table_fixture(), empty_table); - rename_fixture(tsfile_cli_test::write_category_edge_fixture(), - category_edge); - rename_fixture(tsfile_cli_test::write_empty_field_fixture(), empty_field); - - const std::vector fixtures = { - {"empty_table", empty_table, "sensors"}, - {"category_edge", category_edge, "category_edge"}, - {"empty_field", empty_field, "sensors"}}; - for (const Fixture& fixture : fixtures) { - for (const std::string& command : - {"ls", "schema", "meta", "stats", "count"}) { - for (const std::string& format : {"table", "ndjson", "csv"}) { - expect_success_golden( - fixture.name + "_" + command + "_" + format, - {command, "-f", format, fixture.path}); - } - } - for (const std::string& command : {"head", "cat"}) { - for (const std::string& format : {"table", "ndjson", "csv"}) { - expect_success_golden( - fixture.name + "_" + command + "_" + format, - {command, "-t", fixture.scope, "-f", format, fixture.path}); - } - } - expect_success_golden(fixture.name + "_sketch", - {"sketch", fixture.path}); - for (const std::string& format : {"table", "ndjson", "csv"}) { - const std::string target = - "tsfile_cli_" + fixture.name + "_export_" + format + ".out"; - std::remove(target.c_str()); - CliResult result = execute({"export", "-t", fixture.scope, "--type", - format, "-o", target, fixture.path}); - ASSERT_EQ(result.code, 0) - << fixture.name << " " << format << ": " << result.err; - ASSERT_TRUE(result.out.empty()); - ASSERT_TRUE(result.err.empty()); - ASSERT_TRUE(std::ifstream(target.c_str(), std::ios::binary).good()); - expect_or_update_golden(fixture.name + "_export_" + format, - read_bytes(target)); - std::remove(target.c_str()); - } - } - std::remove(empty_table.c_str()); - std::remove(category_edge.c_str()); - std::remove(empty_field.c_str()); -} - -TEST(IndependentFixtures, EmptyTreeAndInputFailuresHaveExactDiagnostics) { - const std::string empty_tree = "tsfile_cli_empty_tree_golden.tsfile"; - rename_fixture(tsfile_cli_test::write_empty_tree_fixture(), empty_tree); - - // A schema-only tree is a legal empty TsFile, but it has no device index; - // metadata commands still succeed with deterministic header-only output. - for (const std::string& command : - {"ls", "schema", "meta", "stats", "count"}) { - for (const std::string& format : {"table", "ndjson", "csv"}) { - expect_success_golden("empty_tree_" + command + "_" + format, - {command, "-f", format, empty_tree}); - } - } - expect_success_golden("empty_tree_sketch", {"sketch", empty_tree}); - - // Row/export commands cannot select an absent device; verify their - // user-facing usage failure exactly instead of merely checking a substring. - for (const std::string& command : {"head", "cat"}) { - for (const std::string& format : {"table", "ndjson", "csv"}) { - expect_cli_exact({command, "-f", format, empty_tree}, 3, "", - "Error: no device found in file\n"); - } - } - for (const std::string& format : {"table", "ndjson", "csv"}) { - const std::string target = "tsfile_cli_empty_tree_export_" + format; - expect_cli_exact({"export", "-d", "root.empty.d1", "--type", format, - "-o", target, empty_tree}, - 1, "", - "Error: device 'root.empty.d1' does not exist\n"); - std::remove(target.c_str()); - } - std::remove(empty_tree.c_str()); - - const std::vector commands = {"ls", "schema", "meta", - "stats", "count", "head", - "cat", "sketch", "export"}; - const auto input_args = [](const std::string& command, - const std::string& path) { - if (command == "export") { - return std::vector{"export", - "-t", - "missing", - "--type", - "csv", - "-o", - "tsfile_cli_input_error.csv", - path}; - } - std::vector args = {command}; - if (command != "sketch" && command != "head" && command != "cat") { - args.insert(args.end(), {"-f", "csv"}); - } - args.push_back(path); - return args; - }; - const std::string missing = "tsfile_cli_missing_input.tsfile"; - std::remove(missing.c_str()); - for (const std::string& command : commands) { - std::remove("tsfile_cli_input_error.csv"); - expect_cli_exact( - input_args(command, missing), 2, "", - "Error: cannot open " + missing + ": cannot open file (code 28)\n"); - } - const std::string damaged = "tsfile_cli_damaged_input.tsfile"; - { - std::ofstream out(damaged.c_str(), std::ios::binary | std::ios::trunc); - ASSERT_TRUE(out.good()); - out << "not a TsFile"; - } - for (const std::string& command : commands) { - std::remove("tsfile_cli_input_error.csv"); - expect_cli_exact(input_args(command, damaged), 2, "", - "Error: cannot open " + damaged + - ": file is corrupted (code 35)\n"); - } - std::remove(damaged.c_str()); - - const std::string unsupported = tsfile_cli_test::write_empty_tree_fixture(); - ASSERT_FALSE(unsupported.empty()); - { - std::fstream file(unsupported.c_str(), - std::ios::in | std::ios::out | std::ios::binary); - ASSERT_TRUE(file.good()); - file.seekp(storage::MAGIC_STRING_TSFILE_LEN); - file.put(static_cast(0xff)); - } - for (const std::string& command : commands) { - std::remove("tsfile_cli_input_error.csv"); - expect_cli_exact(input_args(command, unsupported), 2, "", - "Error: cannot open " + unsupported + - ": unsupported TsFile format version (code 56)\n"); - } - std::remove(unsupported.c_str()); - - // Directories are special input paths, not TsFiles. The check is made in - // LocalRandomAccessReadFile before magic parsing, so this diagnostic is - // stable across all read commands and does not leak parser output to - // stdout. - for (const std::string& command : commands) { - std::remove("tsfile_cli_input_error.csv"); - expect_cli_exact(input_args(command, "."), 2, "", - "Error: cannot open .: invalid path (code 37)\n"); - } -#ifndef _WIN32 - // A FIFO (named pipe) is a special file, not a TsFile. POSIX - // open(O_RDONLY) would otherwise block until a writer appears, so the - // reader must preflight the file type and fail fast with the same stable - // diagnostic instead of hanging. - { - const std::string fifo = tsfile_cli_test::unique_temp_path( - "tsfile_cli_fifo_input", ".tsfile"); - ASSERT_EQ(mkfifo(fifo.c_str(), 0600), 0); - for (const std::string& command : commands) { - std::remove("tsfile_cli_input_error.csv"); - expect_cli_exact( - input_args(command, fifo), 2, "", - "Error: cannot open " + fifo + ": invalid path (code 37)\n"); - } - std::remove(fifo.c_str()); - } -#endif - std::remove("tsfile_cli_input_error.csv"); -} - -TEST(IndependentFixtures, NonPureFilesAreRejectedWithExactDiagnostics) { - const std::string path = tsfile_cli_test::write_non_pure_fixture(); - ASSERT_FALSE(path.empty()); - - const std::vector commands = {"ls", "schema", "meta", - "stats", "count", "head", - "cat", "sketch", "export"}; - const auto input_args = [](const std::string& command, - const std::string& file) { - if (command == "export") { - return std::vector{"export", - "-t", - "hybrid_table", - "--type", - "csv", - "-o", - "tsfile_cli_non_pure_export.csv", - file}; - } - std::vector args = {command}; - if (command != "sketch" && command != "head" && command != "cat") { - args.insert(args.end(), {"-f", "csv"}); - } - args.push_back(file); - return args; - }; - const std::string expected = - "Error: input TsFile must be a pure tree-model or pure table-model " - "file\n"; - for (const std::string& command : commands) { - std::remove("tsfile_cli_non_pure_export.csv"); - expect_cli_exact(input_args(command, path), 2, "", expected); - } - std::remove("tsfile_cli_non_pure_export.csv"); - std::remove(path.c_str()); -} - -TEST(IndependentFixtures, MultiTableCorruptionStopsExportAfterFirstObject) { - const std::string path = - tsfile_cli_test::write_multi_table_corrupt_fixture(); - ASSERT_FALSE(path.empty()); - const std::string output_dir = - tsfile_cli_test::unique_temp_path("tsfile_cli_corrupt_export_dir", ""); - std::remove((output_dir + "/0001.csv").c_str()); - std::remove((output_dir + "/0002.csv").c_str()); - std::remove((output_dir + "/_manifest.json").c_str()); - - CliResult result = - execute({"export", "-t", "sensors_a", "-t", "sensors_b", "--type", - "csv", "--output-dir", output_dir, path}); - const std::string expected_error = - "Error: failed to read rows: file is corrupted\n"; - expect_cli_exact({"cat", "-t", "sensors_b", "-f", "csv", path}, 2, "", - expected_error); - EXPECT_EQ(result.code, 2) << result.out << result.err; - EXPECT_TRUE(result.out.empty()); - EXPECT_EQ(result.err, expected_error); - EXPECT_EQ(read_bytes(output_dir + "/0001.csv"), - "time,id1,s1\n0,sensors_a_tag,10\n"); - EXPECT_FALSE(std::ifstream(output_dir + "/0002.csv").good()); - EXPECT_EQ(read_bytes(output_dir + "/_manifest.json"), - "{\n \"complete\": false,\n \"files\": [\n" - " {\"file\":\"0001.csv\",\"model\":\"table\"," - "\"object\":\"sensors_a\",\"type\":\"csv\"," - "\"rows\":\"1\"}\n ]\n}\n"); - - std::remove((output_dir + "/0001.csv").c_str()); - std::remove((output_dir + "/0002.csv").c_str()); - std::remove((output_dir + "/_manifest.json").c_str()); - std::remove(output_dir.c_str()); - std::remove(path.c_str()); -} - -TEST(IndependentFixtures, NullableTagsHaveExactPredicateResults) { - const std::string path = - tsfile_cli_test::write_nullable_tag_filter_fixture(); - ASSERT_FALSE(path.empty()); - - const auto cat = [&path](const std::vector& filter) { - std::vector args = {"cat", "-t", "t1", - "-m", "s1", "--tag-filter"}; - args.insert(args.end(), filter.begin(), filter.end()); - args.insert(args.end(), {"-f", "csv", path}); - return args; - }; - expect_cli_exact(cat({"id1", "is-null"}), 0, "time,id1,s1\n0,\\N,10\n", ""); - expect_cli_exact(cat({"id1", "not-null"}), 0, - "time,id1,s1\n1,\"\",20\n3,dev_a,40\n4,dev_b,50\n" - "2,null,30\n", - ""); - expect_cli_exact(cat({"id1", "eq", ""}), 0, "time,id1,s1\n1,\"\",20\n", ""); - expect_cli_exact(cat({"id1", "eq", "null"}), 0, "time,id1,s1\n2,null,30\n", - ""); - expect_cli_exact(cat({"id1", "neq", "dev_a"}), 0, - "time,id1,s1\n1,\"\",20\n4,dev_b,50\n2,null,30\n", ""); - expect_cli_exact(cat({"id1", "regexp", "dev"}), 0, "time,id1,s1\n", ""); - expect_cli_exact(cat({"id1", "regexp", "dev_.*"}), 0, - "time,id1,s1\n3,dev_a,40\n4,dev_b,50\n", ""); - - std::remove(path.c_str()); -} - -TEST(IndependentFixtures, SpecialCsvInputsHaveExactCodesAndErrors) { - struct Case { - const char* name; - const char* csv; - const char* expected; - }; - const Case cases[] = { - {"invalid_time", "time,site,temp\n01,dev,1\n", - "Error: bad timestamp '01' (line 2)\n"}, - {"out_of_order", "time,site,temp\n2000,dev,1\n1000,dev,2\n", - "Error: timestamps must be strictly increasing per device (line 3: " - "1000 <= previous 2000)\n"}, - {"undeclared", "time,site,temp,status\n0,dev,1,ok\n", - "Error: CSV contains undeclared column 'status'\n"}, - {"missing_column", "time,site\n0,beijing\n", - "Error: CSV header is missing required column 'temp'\n"}, - {"unclosed_quote", "time,site,temp\n0,dev,\"unterminated\n", - "Error: unterminated quoted CSV field (line 2)\n"}, - {"comment", "time,site,temp\n# comment\n", - "Error: expected 3 fields, got 1 (line 2)\n"}, - }; - for (const Case& test_case : cases) { - const std::string csv_path = - std::string("tsfile_cli_") + test_case.name + ".csv"; - const std::string output_path = - std::string("tsfile_cli_") + test_case.name + ".tsfile"; - std::remove(csv_path.c_str()); - std::remove(output_path.c_str()); - { - std::ofstream csv(csv_path.c_str(), - std::ios::binary | std::ios::trunc); - ASSERT_TRUE(csv.good()); - csv << test_case.csv; - } - expect_cli_exact( - {"write", "--table", "sensors", "--tag", "site", "STRING", - "--field", "temp", "INT64", "-i", csv_path, "-o", output_path}, - 2, "", test_case.expected); - EXPECT_FALSE(std::ifstream(output_path.c_str()).good()); - std::remove(csv_path.c_str()); - std::remove(output_path.c_str()); - } -} - -TEST(IndependentFixtures, ControlCharCellsRenderAsVisibleEscapes) { - const std::string fixture = tsfile_cli_test::write_control_char_fixture(); - - // `table` keeps one logical record on one physical line by escaping - // newline, tab and backslash into visible two-character sequences. - expect_cli_exact({"cat", "-t", "t1", "-f", "table", fixture}, 0, - "time site note\n" - "1000 s1 line1\\nline2\n" - "2000 s2 tab\\there\n" - "3000 s3 back\\\\slash\n", - ""); - - // CSV/NDJSON keep their machine-format semantics unchanged: the embedded - // newline/tab/backslash survive verbatim inside CSV quotes or as JSON - // escapes, never flattened into the visible table representation. - expect_cli_exact({"cat", "-t", "t1", "-f", "csv", fixture}, 0, - "time,site,note\n" - "1000,s1,\"line1\nline2\"\n" - "2000,s2,tab\there\n" - "3000,s3,back\\slash\n", - ""); - expect_cli_exact( - {"cat", "-t", "t1", "-f", "ndjson", fixture}, 0, - "{\"time\":\"1000\",\"site\":\"s1\",\"note\":\"line1\\nline2\"}\n" - "{\"time\":\"2000\",\"site\":\"s2\",\"note\":\"tab\\there\"}\n" - "{\"time\":\"3000\",\"site\":\"s3\",\"note\":\"back\\\\slash\"}\n", - ""); - - std::remove(fixture.c_str()); -} - -INSTANTIATE_TEST_SUITE_P(TreeAndTable, BothModels, - ::testing::Values(ModelFile{true, - {"-d", "root.test.d1"}}, - ModelFile{false, {"-t", "table2"}}), - [](const ::testing::TestParamInfo& info) { - return info.index == 0 ? "Tree" : "Table"; - }); diff --git a/cpp/test/tools/utf8_collision_e2e_test.cc b/cpp/test/tools/utf8_collision_e2e_test.cc deleted file mode 100644 index cedca663b..000000000 --- a/cpp/test/tools/utf8_collision_e2e_test.cc +++ /dev/null @@ -1,438 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 -#include - -#include -#include -#include -#include -#include - -#include "cli/run_cli.h" -#include "cli_test_util.h" -#include "format/input_format.h" - -namespace { - -const std::vector kFormats = {"csv", "table", "ndjson"}; -const std::vector kNames = {"bad\xff", "bad\xfe", - "bad\xef\xbf\xbd"}; - -struct TreeDefinition { - std::string device; - std::vector fields; -}; - -struct TableDefinition { - std::string table; - std::vector tags; - std::vector fields; -}; - -class CliUtf8CollisionTest : public ::testing::Test { - protected: - void SetUp() override { storage::libtsfile_init(); } - - void TearDown() override { - for (const auto& path : files_) std::remove(path.c_str()); - for (const auto& path : directories_) { - for (const auto& name : - {"_manifest.json", "0001.csv", "0002.csv", "0001.ndjson", - "0002.ndjson", "0001.txt", "0002.txt"}) { - std::remove((path + "/" + name).c_str()); - } -#ifdef _WIN32 - _rmdir(path.c_str()); -#else - rmdir(path.c_str()); -#endif - } - } - - std::string temp_file(const std::string& extension = ".tsfile") { - std::string path = - tsfile_cli_test::unique_temp_path("utf8_collision", extension); - files_.push_back(path); - return path; - } - - std::string temp_directory() { - std::string path = - tsfile_cli_test::unique_temp_path("utf8_collision_export", ""); - directories_.push_back(path); - return path; - } - - bool exists(const std::string& path) { - struct stat st; - return stat(path.c_str(), &st) == 0; - } - - void write_tree(const std::string& path, - const std::vector& definitions, - bool aligned = false) { - storage::WriteFile file; - int flags = O_WRONLY | O_CREAT | O_TRUNC; -#ifdef _WIN32 - flags |= O_BINARY; -#endif - ASSERT_EQ(file.create(path, flags, 0666), common::E_OK); - storage::TsFileTreeWriter writer(&file); - for (const auto& definition : definitions) { - std::string device = definition.device; - std::vector schemas; - for (const auto& field : definition.fields) { - schemas.push_back(new storage::MeasurementSchema( - field, common::INT64, common::PLAIN, common::UNCOMPRESSED)); - if (!aligned) { - ASSERT_EQ( - writer.register_timeseries(device, schemas.back()), - common::E_OK); - } - } - if (aligned) { - ASSERT_EQ(writer.register_timeseries(device, schemas), - common::E_OK); - } - storage::TsRecord record(device, 1000); - for (const auto& field : definition.fields) { - record.add_point(field, static_cast(42)); - } - ASSERT_EQ(writer.write(record), common::E_OK); - if (!aligned) { - for (auto* schema : schemas) delete schema; - } - } - ASSERT_EQ(writer.flush(), common::E_OK); - ASSERT_EQ(writer.close(), common::E_OK); - } - - void write_tables(const std::string& path, - const std::vector& definitions, - int rows = 2) { - storage::TsFileWriter writer; - ASSERT_EQ(writer.open(path), common::E_OK); - for (const auto& definition : definitions) { - std::vector columns; - std::vector names; - std::vector types; - std::vector categories; - for (const auto& tag : definition.tags) { - columns.push_back(common::ColumnSchema( - tag, common::STRING, common::UNCOMPRESSED, common::PLAIN, - common::ColumnCategory::TAG)); - names.push_back(tag); - types.push_back(common::STRING); - categories.push_back(common::ColumnCategory::TAG); - } - for (const auto& field : definition.fields) { - columns.push_back(common::ColumnSchema( - field, common::INT64, common::UNCOMPRESSED, common::PLAIN, - common::ColumnCategory::FIELD)); - names.push_back(field); - types.push_back(common::INT64); - categories.push_back(common::ColumnCategory::FIELD); - } - ASSERT_EQ( - writer.register_table(std::make_shared( - definition.table, columns)), - common::E_OK); - if (rows == 0) continue; - storage::Tablet tablet(definition.table, names, types, categories, - rows); - for (int row = 0; row < rows; ++row) { - tablet.add_timestamp(row, static_cast(1000 + row)); - for (const auto& tag : definition.tags) { - tablet.add_value(row, tag, row == 0 ? "first" : "second"); - } - for (const auto& field : definition.fields) { - tablet.add_value(row, field, static_cast(42)); - } - } - ASSERT_EQ(writer.write_table(tablet), common::E_OK); - } - ASSERT_EQ(writer.flush(), common::E_OK); - ASSERT_EQ(writer.close(), common::E_OK); - } - - void expect_collision(const std::vector& args) { - std::ostringstream out, err; - EXPECT_EQ(tsfile_cli::run_cli(args, out, err), 2) << err.str(); - EXPECT_TRUE(out.str().empty()) << out.str(); - EXPECT_NE(err.str().find("after UTF-8 replacement"), std::string::npos) - << err.str(); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(err.str())); - } - - void expect_success(const std::vector& args) { - std::ostringstream out, err; - EXPECT_EQ(tsfile_cli::run_cli(args, out, err), 0) << err.str(); - EXPECT_TRUE(err.str().empty()) << err.str(); - EXPECT_TRUE(tsfile_cli::is_valid_utf8(out.str())); - } - - private: - std::vector files_; - std::vector directories_; -}; - -TEST_F(CliUtf8CollisionTest, TreeColumnsFailBeforeOutputAcrossFormats) { - for (bool aligned : {false, true}) { - const std::string path = temp_file(); - write_tree(path, {{"root.d", kNames}}, aligned); - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - for (const auto& command : - {"schema", "count", "stats", "head", "cat"}) { - SCOPED_TRACE(std::string(command) + " " + format + - " aligned=" + std::to_string(aligned)); - expect_collision({command, "-f", format, path}); - } - expect_success({"ls", "-f", format, path}); - } - // Sketch deliberately follows printSketch without collision checking. - expect_success({"sketch", path}); - } -} - -TEST_F(CliUtf8CollisionTest, TableFieldsAndTagsFailBeforeOutputAcrossFormats) { - const std::vector definitions = { - {"t", {"id"}, kNames}, - {"t", kNames, {"value"}}, - {"t", {kNames[0]}, {kNames[1]}}, - {"t", {"id"}, {kNames[0], kNames[2]}}}; - for (const auto& definition : definitions) { - for (int rows : {0, 2}) { - const std::string path = temp_file(); - write_tables(path, {definition}, rows); - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - for (const auto& command : - {"schema", "count", "stats", "head", "cat"}) { - SCOPED_TRACE(std::string(command) + " " + format + - " rows=" + std::to_string(rows)); - expect_collision({command, "-f", format, path}); - } - expect_success({"ls", "-f", format, path}); - } - } - } -} - -TEST_F(CliUtf8CollisionTest, ObjectCollisionsDoNotRequireMatchingColumnNames) { - for (bool table : {false, true}) { - for (size_t second : {size_t(1), size_t(2)}) { - const std::string path = temp_file(); - if (table) { - write_tables(path, {{kNames[0], {"id"}, {"left"}}, - {kNames[second], {"id"}, {"right"}}}); - } else { - write_tree( - path, {{kNames[0], {"left"}}, {kNames[second], {"right"}}}); - } - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - for (const auto& command : {"ls", "schema", "count", "stats"}) { - SCOPED_TRACE(std::string(command) + " " + format); - expect_collision({command, "-f", format, path}); - if (std::string(command) != "ls") { - expect_success({command, table ? "-t" : "-d", kNames[0], - "-f", format, path}); - expect_success( - {command, "-m", "left", "-f", format, path}); - } - } - } - } - } -} - -TEST_F(CliUtf8CollisionTest, ProjectionAndSeparateColumnScopesRemainValid) { - for (bool table : {false, true}) { - const std::string path = temp_file(); - const std::string scoped = temp_file(); - if (table) { - write_tables(path, {{"a", {"id"}, kNames}}); - write_tables(scoped, {{"a", {"id"}, {kNames[0], "value"}}, - {"b", {"id"}, {kNames[1], "value"}}}); - } else { - write_tree(path, {{"a", kNames}}); - write_tree(scoped, {{"a", {kNames[0], "value"}}, - {"b", {kNames[1], "value"}}}); - } - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - for (const auto& command : - {"schema", "count", "stats", "head", "cat"}) { - expect_success({command, "-m", kNames[0], "-f", format, path}); - if (std::string(command) != "head" && - std::string(command) != "cat") { - expect_success({command, "-f", format, scoped}); - } - } - const std::string output = temp_file(".out"); - expect_success({"export", table ? "-t" : "-d", "a", "-m", kNames[0], - "--type", format, "-o", output, path}); - EXPECT_TRUE(exists(output)); - const std::string dir = temp_directory(); - expect_success({"export", table ? "-t" : "-d", "a", - table ? "-t" : "-d", "b", "--type", format, - "--output-dir", dir, scoped}); - EXPECT_TRUE(exists(dir + "/_manifest.json")); - } - } -} - -TEST_F(CliUtf8CollisionTest, StatsChecksMergedTagHeadersAcrossTables) { - const std::string path = temp_file(); - write_tables( - path, {{"a", {kNames[0]}, {"value"}}, {"b", {kNames[1]}, {"value"}}}); - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - expect_collision({"stats", "-f", format, path}); - for (const auto& command : {"schema", "count"}) { - expect_success({command, "-f", format, path}); - } - expect_success({"stats", "-t", "a", "-f", format, path}); - } -} - -TEST_F(CliUtf8CollisionTest, EmptyRowWindowsCannotHideSelectedNameCollisions) { - const std::vector> windows = { - {"-n", "0"}, - {"--start", "0", "-n", "0"}, - {"--start", "2000"}, - {"--end", "0"}, - {"--offset", "1"}}; - for (bool table : {false, true}) { - const std::string path = temp_file(); - if (table) - write_tables(path, {{"t", {"id"}, kNames}}); - else - write_tree(path, {{"root.d", kNames}}); - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - for (const auto& window : windows) { - for (const auto& command : {"head", "cat", "export"}) { - SCOPED_TRACE(std::string(command) + " " + format); - std::vector args = {command}; - args.insert(args.end(), window.begin(), window.end()); - const std::string output = temp_file(".out"); - if (std::string(command) == "export") { - args.insert( - args.end(), - {table ? "-t" : "-d", table ? "t" : "root.d", - "--type", format, "-o", output}); - } else { - args.insert(args.end(), {"-f", format}); - } - args.push_back(path); - expect_collision(args); - EXPECT_FALSE(exists(output)); - } - } - } - } -} - -TEST_F(CliUtf8CollisionTest, ExportCollisionPreservesExistingTargets) { - for (bool table : {false, true}) { - const std::string path = temp_file(); - if (table) - write_tables(path, {{"t", {"id"}, kNames}}); - else - write_tree(path, {{"root.d", kNames}}); - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - const std::string output = temp_file(".out"); - expect_collision({"export", table ? "-t" : "-d", - table ? "t" : "root.d", "--type", format, "-o", - output, path}); - EXPECT_FALSE(exists(output)); - { - std::ofstream file(output.c_str(), std::ios::binary); - file << "keep existing output\n"; - } - expect_collision({"export", table ? "-t" : "-d", - table ? "t" : "root.d", "--type", format, "-o", - output, path}); - expect_collision({"export", table ? "-t" : "-d", - table ? "t" : "root.d", "--type", format, "-o", - output + "/unavailable", path}); - expect_collision({"export", table ? "-t" : "-d", - table ? "t" : "root.d", "--type", format, - "--force", "-o", output, path}); - std::ifstream file(output.c_str(), std::ios::binary); - std::ostringstream content; - content << file.rdbuf(); - EXPECT_EQ(content.str(), "keep existing output\n"); - } - } -} - -TEST_F(CliUtf8CollisionTest, - MultiExportChecksEveryObjectBeforeCreatingDirectory) { - for (bool table : {false, true}) { - for (bool object_collision : {false, true}) { - const std::string first = object_collision ? kNames[0] : "a"; - const std::string second = object_collision ? kNames[1] : "b"; - const std::string path = temp_file(); - if (table) { - write_tables( - path, {{first, {"id"}, {"left"}}, - {second, - {"id"}, - object_collision ? std::vector{"right"} - : kNames}}); - } else { - write_tree(path, - {{first, {"left"}}, - {second, object_collision - ? std::vector{"right"} - : kNames}}); - } - ASSERT_FALSE(HasFatalFailure()); - for (const auto& format : kFormats) { - const std::string dir = temp_directory(); - expect_collision({"export", table ? "-t" : "-d", first, - table ? "-t" : "-d", second, "--type", format, - "--output-dir", dir, path}); - EXPECT_FALSE(exists(dir)); - // A collision takes precedence over output-path errors as - // well, proving it is checked before publication is prepared. - const std::string occupied = temp_file(".out"); - { - std::ofstream file(occupied.c_str()); - file << "keep existing output\n"; - } - expect_collision({"export", table ? "-t" : "-d", first, - table ? "-t" : "-d", second, "--type", format, - "--output-dir", occupied, path}); - std::ifstream file(occupied.c_str()); - std::ostringstream content; - content << file.rdbuf(); - EXPECT_EQ(content.str(), "keep existing output\n"); - } - } - } -} - -} // namespace diff --git a/pom.xml b/pom.xml index 0816e8137..4e15a6ffc 100644 --- a/pom.xml +++ b/pom.xml @@ -130,7 +130,8 @@ **/.jpg **/.jpeg - **/test/tools/golden/** + **/test/tools/e2e/golden/** + **/test/tools/e2e/fixtures/** local-snapshots-dir/**