From 322b0a04424b2ae3b1e36e831d8db89cf88c8a22 Mon Sep 17 00:00:00 2001 From: ColinLee Date: Tue, 13 Oct 2026 17:03:11 +0800 Subject: [PATCH] test(cpp): run CLI E2E cases from portable command and golden files --- .gitattributes | 4 + .github/workflows/unit-test-cpp-msvc.yml | 9 + .github/workflows/unit-test-cpp.yml | 9 + cpp/test/CMakeLists.txt | 31 + cpp/test/tools/cli_args_test.cc | 92 - cpp/test/tools/cli_internal_test.cc | 275 + cpp/test/tools/cli_requirements_test.cc | 1252 -- cpp/test/tools/command_e2e_test.cc | 2073 -- cpp/test/tools/e2e/.gitignore | 19 + cpp/test/tools/e2e/README.md | 130 + cpp/test/tools/e2e/cases.json | 17838 ++++++++++++++++ .../{ => e2e}/fixtures/complex_table.tsfile | Bin .../{ => e2e}/fixtures/complex_tree.tsfile | Bin .../fixtures/recorded/001a55cd3aa30703.csv | 1102 + .../fixtures/recorded/02e7ee891c98c640.tsfile | Bin 0 -> 446 bytes .../fixtures/recorded/04fb4d7ce9cd9f35.csv | 2 + .../fixtures/recorded/0a285e57e7770abd.csv | 2 + .../fixtures/recorded/0eef1509ca9d2e9b.tsfile | Bin 0 -> 222 bytes .../fixtures/recorded/0fbee3b1c70b3081.csv | 2 + .../fixtures/recorded/0fe32771aae23654.tsfile | Bin 0 -> 203 bytes .../fixtures/recorded/11b77be68feb2859.out | 1 + .../fixtures/recorded/162d394b288bb12d.csv | 3 + .../fixtures/recorded/1692892e6fa59720.csv | 2 + .../fixtures/recorded/16a7de49cce86c65.tsfile | 1 + .../fixtures/recorded/19010534e83117ea.tsfile | Bin 0 -> 1034 bytes .../fixtures/recorded/1b1a5cfd0890f477.tsfile | Bin 0 -> 408 bytes .../fixtures/recorded/21040fc546353838.csv | 2 + .../fixtures/recorded/21729ccbd4c9217d.tsfile | Bin 0 -> 451 bytes .../fixtures/recorded/25bf81a100c6d89c.tsfile | Bin 0 -> 579 bytes .../fixtures/recorded/280cb420cebd39d7.csv | 2 + .../fixtures/recorded/2b7847b7b705781d.txt | 1 + .../fixtures/recorded/2ed856c16e47ccba.tsfile | Bin 0 -> 184 bytes .../fixtures/recorded/3098941db5f6f150.tsfile | Bin 0 -> 794 bytes .../fixtures/recorded/30eb087a88f388c1.csv | 3 + .../fixtures/recorded/31970968f7fa8f20.csv | 3 + .../fixtures/recorded/321afaf69e20bc17.tsfile | Bin 0 -> 124 bytes .../fixtures/recorded/32bf457d65422f93.csv | 4 + .../fixtures/recorded/32df682cd666de13.csv | 2 + .../fixtures/recorded/3497e1b9bed50133.csv | 3 + .../fixtures/recorded/3681eaaa9dd04162.csv | 3 + .../fixtures/recorded/38d1a142bdf82d96.csv | 2 + .../fixtures/recorded/3a22c3d57d16053e.csv | 2 + .../fixtures/recorded/3f705604910a155c.tsfile | Bin 0 -> 1468 bytes .../fixtures/recorded/3f73b03698921151.csv | 2 + .../fixtures/recorded/4437ed311b6ffac5.csv | 2 + .../fixtures/recorded/443d44fab5249879.csv | 2 + .../fixtures/recorded/462be7cd53efb021.tsfile | Bin 0 -> 124 bytes .../fixtures/recorded/4c8de02fcad64c24.csv | 17 + .../fixtures/recorded/50568f65241e50ce.csv | 2 + .../fixtures/recorded/5077671e7b6996b9.tsfile | Bin 0 -> 521 bytes .../fixtures/recorded/59b2d6c45e72adb4.csv | 2 + .../fixtures/recorded/5a1ae43282c6e8d5.tsfile | Bin 0 -> 1070 bytes .../fixtures/recorded/5d51538ae37766cf.tsfile | Bin 0 -> 729 bytes .../fixtures/recorded/5fbbb88cc56b243a.csv | 2 + .../fixtures/recorded/627d54d74200f724.tsfile | Bin 0 -> 17 bytes .../fixtures/recorded/65f89edd125782e8.tsfile | Bin 0 -> 568 bytes .../fixtures/recorded/6814760cd5c03c70.tsfile | Bin 0 -> 729 bytes .../fixtures/recorded/6e073691a8e066e5.csv | 2 + .../fixtures/recorded/6e07eb49b34dc35a.tsfile | Bin 0 -> 692 bytes .../fixtures/recorded/74123c6ba2cf9a64.csv | 2 + .../fixtures/recorded/77d5cdbf284147c1.csv | 2 + .../fixtures/recorded/7a5d81e3af50bc9a.csv | 2 + .../fixtures/recorded/7c94f08bcfc8bf1f.csv | 2 + .../fixtures/recorded/7e91ad7bab6c76d5.tsfile | Bin 0 -> 588 bytes .../fixtures/recorded/80388eb9de4a9e91.csv | 2 + .../fixtures/recorded/856f46a20c5f7c7b.csv | 2 + .../fixtures/recorded/87d4e8b040a0e258.tsfile | Bin 0 -> 470 bytes .../fixtures/recorded/891a43b84b1ac825.csv | 2 + .../fixtures/recorded/89472d6be3e8a4f2.tsfile | Bin 0 -> 596 bytes .../fixtures/recorded/8b4b9aa145a1d812.tsfile | Bin 0 -> 538 bytes .../fixtures/recorded/8c384af9ff83865c.tsfile | Bin 0 -> 1134 bytes .../fixtures/recorded/8cd34bf42ce458c6.txt | 1 + .../fixtures/recorded/956fbe6974cab2b1.tsfile | Bin 0 -> 1082 bytes .../fixtures/recorded/9b943a465ab2e97e.tsfile | Bin 0 -> 165 bytes .../fixtures/recorded/9f14fda22c4e2ba7.csv | 2 + .../fixtures/recorded/9fe4acf66641a6f7.csv | 2501 +++ .../fixtures/recorded/a3888eac21f087b1.tsfile | Bin 0 -> 819 bytes .../fixtures/recorded/a520e2dad89980a5.tsfile | Bin 0 -> 206 bytes .../fixtures/recorded/a7e15add9795acb0.tsfile | Bin 0 -> 508 bytes .../fixtures/recorded/ab6e968534a7e087.csv | 3 + .../fixtures/recorded/acd5b9243a38e4f8.tsfile | Bin 0 -> 190 bytes .../fixtures/recorded/b32ffaa9b5e49e11.csv | 2 + .../fixtures/recorded/b6251665e053a224.tsfile | Bin 0 -> 408 bytes .../fixtures/recorded/b7aa5a377f9d473e.csv | 3 + .../fixtures/recorded/bac2896165b44e56.csv | 8 + .../fixtures/recorded/be1a2fdc5942bebd.csv | 2 + .../fixtures/recorded/c084f0d9b5cc00bc.csv | 2 + .../fixtures/recorded/c1a66b9d085b4360.tsfile | 1 + .../fixtures/recorded/c7da5b75d91e3488.csv | 3 + .../fixtures/recorded/cea175b2e6fa8cdb.tsfile | Bin 0 -> 1042 bytes .../fixtures/recorded/cebca58ed56e0aab.tsfile | Bin 0 -> 1034 bytes .../fixtures/recorded/d083ba5c0e6a1b67.csv | 3 + .../fixtures/recorded/d7b0a040cecabf8d.tsfile | Bin 0 -> 1468 bytes .../fixtures/recorded/d7b49e2bdcff8bb2.tsfile | Bin 0 -> 737 bytes .../fixtures/recorded/d97187a52ca24996.csv | 2 + .../fixtures/recorded/dc7368474f850fc0.csv | 17 + .../fixtures/recorded/de21dc67151aafff.csv | 3001 +++ .../fixtures/recorded/decdfb5a1f49df91.csv | 2 + .../fixtures/recorded/df3a55081911cd32.csv | 3 + .../fixtures/recorded/dfb06bb1a4e09036.csv | 5 + .../fixtures/recorded/e2ca60a29f45f9e6.csv | 2 + .../fixtures/recorded/e47f2cf974f4288d.csv | 8 + .../fixtures/recorded/e5721dc3ee3437dd.csv | 2 + .../fixtures/recorded/e7c20447ea054908.tsfile | Bin 0 -> 515 bytes .../fixtures/recorded/e7e0024a5247b1f7.tsfile | Bin 0 -> 729 bytes .../fixtures/recorded/e8c9ceba19eff9ac.tsfile | Bin 0 -> 562 bytes .../fixtures/recorded/ea9c53e37f6ee36c.csv | 4 + .../fixtures/recorded/ebbbc7b819bea734.csv | 2 + .../fixtures/recorded/f23d8f69b526430f.csv | 2 + .../fixtures/recorded/f6209221447efc09.tsfile | Bin 0 -> 597 bytes .../fixtures/recorded/f65a26f837b23e39.tsfile | Bin 0 -> 735 bytes .../fixtures/recorded/f70c095c6ba45072.tsfile | Bin 0 -> 5334 bytes .../fixtures/recorded/fda14729ef2687ab.csv | 4 + .../fixtures/recorded/ff981d1dcd989b10.tsfile | Bin 0 -> 827 bytes cpp/test/tools/e2e/fixtures/stdin.csv | 3 + .../golden/category_edge_cat_csv.txt | 0 .../golden/category_edge_cat_ndjson.txt | 0 .../golden/category_edge_cat_table.txt | 0 .../golden/category_edge_count_csv.txt | 0 .../golden/category_edge_count_ndjson.txt | 0 .../golden/category_edge_count_table.txt | 0 .../golden/category_edge_export_csv.txt | 0 .../golden/category_edge_export_ndjson.txt | 0 .../golden/category_edge_export_table.txt | 0 .../golden/category_edge_head_csv.txt | 0 .../golden/category_edge_head_ndjson.txt | 0 .../golden/category_edge_head_table.txt | 0 .../{ => e2e}/golden/category_edge_ls_csv.txt | 0 .../golden/category_edge_ls_ndjson.txt | 0 .../golden/category_edge_ls_table.txt | 0 .../golden/category_edge_meta_csv.txt | 0 .../golden/category_edge_meta_ndjson.txt | 0 .../golden/category_edge_meta_table.txt | 0 .../golden/category_edge_schema_csv.txt | 0 .../golden/category_edge_schema_ndjson.txt | 0 .../golden/category_edge_schema_table.txt | 0 .../{ => e2e}/golden/category_edge_sketch.txt | 0 .../golden/category_edge_stats_csv.txt | 0 .../golden/category_edge_stats_ndjson.txt | 0 .../golden/category_edge_stats_table.txt | 0 .../001.stdout.txt | 3 + .../001.stdout.txt | 3 + .../001.stderr.txt | 1 + .../002.stderr.txt | 1 + .../001.stdout.txt | 5 + .../002.stdout.txt | 3 + .../001.stdout.txt | 2 + .../002.stdout.txt | 2 + .../001.stdout.txt | 2 + .../002.stdout.txt | 2 + .../001.stdout.txt | 4 + .../001.stdout.txt | 4 + .../001.stdout.txt | 3 + .../001.stdout.txt | 4 + .../001.stdout.txt | 3 + .../002.stdout.txt | 3 + .../003.stdout.txt | 3 + .../004.stdout.txt | 3 + .../005.stdout.txt | 2 + .../008.stdout.txt | 2 + .../009.stdout.txt | 2 + .../010.stdout.txt | 2 + .../011.stdout.txt | 2 + .../012.stdout.txt | 1 + .../015.stdout.txt | 3 + .../016.stdout.txt | 3 + .../017.stdout.txt | 3 + .../018.stdout.txt | 3 + .../019.stdout.txt | 2 + .../022.stdout.txt | 68 + .../023.0002.ndjson.txt | 1 + .../023._manifest.json.txt | 7 + .../001.stderr.txt | 27 + .../CliE2E.LsRejectsNoHeader/001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../001.stdout.txt | 2 + .../001.stdout.txt | 2 + .../001.stderr.txt | 1 + .../001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../001.stdout.txt | 1 + .../002.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stdout.txt | 2 + .../001.stderr.txt | 27 + .../001.stdout.txt | 2 + .../002.roundtrip.txt | 4 + .../003.stdout.txt | 3 + .../001.stderr.txt | 1 + .../001.stdout.txt | 2 + .../002.stdout.txt | 2 + .../003.stdout.txt | 2 + .../004.stdout.txt | 5 + .../005.stdout.txt | 4 + .../001.stdout.txt | 1 + .../002.stdout.txt | 3 + .../003.stderr.txt | 1 + .../001.stdout.txt | 3 + .../002.stdout.txt | 3 + .../001.stdout.txt | 1 + .../002.stdout.txt | 4 + .../002.roundtrip.txt | 1 + .../002.roundtrip.txt | 1 + .../002.roundtrip.txt | 3 + .../003.stdout.txt | 3 + .../002.roundtrip.txt | 4 + .../004.stdout.txt | 17 + .../002.roundtrip.txt | 7 + .../004.stdout.txt | 8 + .../001.stderr.txt | 1 + .../002.stderr.txt | 1 + .../004.roundtrip.txt | 1 + .../002.roundtrip.txt | 2 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../002.roundtrip.txt | 2 + .../003.stdout.txt | 3 + .../002.roundtrip.txt | 1 + .../001.stderr.txt | 27 + .../002.roundtrip.txt | 2500 +++ .../003.stdout.txt | 4 + .../004.stdout.txt | 1 + .../002.roundtrip.txt | 1 + .../003.stdout.txt | 3 + .../CliE2E.WriteRejectsBadDate/001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 27 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../002.stderr.txt | 2 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../002.roundtrip.txt | 1 + .../002.roundtrip.txt | 2 + .../003.stdout.txt | 3 + .../002.roundtrip.txt | 3000 +++ .../003.stdout.txt | 2 + .../002.roundtrip.txt | 2 + .../002.roundtrip.txt | 3 + .../003.stdout.txt | 3 + .../004.stdout.txt | 4 + .../001.stderr.txt | 2 + .../003.stdout.txt | 1 + .../001.stdout.txt | 7 + .../002.stdout.txt | 7 + .../003.stdout.txt | 7 + .../004.stdout.txt | 6 + .../005.stdout.txt | 6 + .../006.stdout.txt | 7 + .../007.stdout.txt | 6 + .../008.stdout.txt | 6 + .../009.stdout.txt | 7 + .../010.stdout.txt | 10 + .../001.stderr.txt | 27 + .../002.stderr.txt | 27 + .../003.stderr.txt | 27 + .../004.stderr.txt | 27 + .../005.stderr.txt | 27 + .../006.stderr.txt | 27 + .../007.stderr.txt | 27 + .../008.stderr.txt | 27 + .../001.stderr.txt | 1 + .../002.stderr.txt | 1 + .../001.0001.csv.txt | 2 + .../001.0002.csv.txt | 2 + .../001._manifest.json.txt | 7 + .../001.tsfile_cli_export_205.csv.txt | 6 + .../001.stdout.txt | 1 + .../002.stderr.txt | 27 + .../003.stderr.txt | 27 + .../001.stderr.txt | 1 + .../001.stderr.txt | 27 + .../001.stdout.txt | 26 + .../001.stderr.txt | 27 + .../001.stdout.txt | 2 + .../001.stderr.txt | 27 + .../002.stderr.txt | 27 + .../001.stdout.txt | 2 + .../001.stderr.txt | 1 + .../002.stdout.txt | 2 + .../001.stderr.txt | 27 + .../002.stdout.txt | 3 + .../001.stderr.txt | 27 + .../002.stdout.txt | 6 + .../001.stderr.txt | 27 + .../001.stdout.txt | 4 + .../001.stderr.txt | 27 + .../001.stdout.txt | 55 + .../003.stderr.txt | 1 + .../005.stderr.txt | 1 + .../001.stdout.txt | 1 + .../002.roundtrip.txt | 2 + .../003.stdout.txt | 4 + .../004.stderr.txt | 1 + .../005.stderr.txt | 1 + .../006.stderr.txt | 1 + .../002.roundtrip.txt | 2 + .../004.stdout.txt | 2 + .../002.roundtrip.txt | 2 + .../003.stdout.txt | 3 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../002.stderr.txt | 1 + .../003.stderr.txt | 1 + .../001.stderr.txt | 27 + .../002.stderr.txt | 27 + .../001.stderr.txt | 1 + .../002.stderr.txt | 1 + .../003.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../002.stderr.txt | 1 + .../002.roundtrip.txt | 2 + .../003.stdout.txt | 3 + .../001.stderr.txt | 1 + .../003.stdout.txt | 2 + .../006.stdout.txt | 2 + .../009.stdout.txt | 2 + .../013.stdout.txt | 2 + .../016.stdout.txt | 2 + .../019.stdout.txt | 2 + .../023.stdout.txt | 1 + .../026.stdout.txt | 1 + .../029.stdout.txt | 1 + .../063.stdout.txt | 3 + .../064.stdout.txt | 2 + .../066.stdout.txt | 3 + .../067.stdout.txt | 2 + .../069.stdout.txt | 3 + .../073.stdout.txt | 3 + .../074.stdout.txt | 2 + .../076.stdout.txt | 3 + .../077.stdout.txt | 2 + .../079.stdout.txt | 3 + .../083.stdout.txt | 2 + .../084.stdout.txt | 1 + .../086.stdout.txt | 2 + .../087.stdout.txt | 1 + .../089.stdout.txt | 2 + .../001.stdout.txt | 2 + .../002.stdout.txt | 5 + .../003.stdout.txt | 2 + .../004.stdout.txt | 5 + .../005.stdout.txt | 2 + .../006.stdout.txt | 5 + .../007.stdout.txt | 2 + .../010.0001.csv.txt | 2 + .../010._manifest.json.txt | 7 + .../011.stdout.txt | 2 + .../012.stdout.txt | 5 + .../013.stdout.txt | 2 + .../014.stdout.txt | 5 + .../015.stdout.txt | 2 + .../016.stdout.txt | 5 + .../017.stdout.txt | 2 + .../020.0001.txt.txt | 2 + .../020._manifest.json.txt | 7 + .../021.stdout.txt | 1 + .../022.stdout.txt | 4 + .../023.stdout.txt | 1 + .../024.stdout.txt | 4 + .../025.stdout.txt | 1 + .../026.stdout.txt | 4 + .../027.stdout.txt | 1 + .../030.0001.ndjson.txt | 1 + .../030._manifest.json.txt | 7 + .../031.stdout.txt | 2 + .../032.stdout.txt | 7 + .../033.stdout.txt | 2 + .../034.stdout.txt | 7 + .../035.stdout.txt | 3 + .../036.stdout.txt | 9 + .../037.stdout.txt | 3 + .../040.0001.csv.txt | 3 + .../040._manifest.json.txt | 7 + .../041.stdout.txt | 2 + .../042.stdout.txt | 7 + .../043.stdout.txt | 2 + .../044.stdout.txt | 7 + .../045.stdout.txt | 3 + .../046.stdout.txt | 9 + .../047.stdout.txt | 3 + .../050.0001.txt.txt | 3 + .../050._manifest.json.txt | 7 + .../051.stdout.txt | 1 + .../052.stdout.txt | 6 + .../053.stdout.txt | 1 + .../054.stdout.txt | 6 + .../055.stdout.txt | 2 + .../056.stdout.txt | 8 + .../057.stdout.txt | 2 + .../060.0001.ndjson.txt | 2 + .../060._manifest.json.txt | 7 + .../001.stderr.txt | 1 + .../002.stdout.txt | 5 + .../003.stdout.txt | 5 + .../004.stdout.txt | 3 + .../006.stdout.txt | 5 + .../007.stdout.txt | 5 + .../008.stdout.txt | 3 + .../010.stdout.txt | 4 + .../011.stdout.txt | 4 + .../012.stdout.txt | 2 + .../006.stdout.txt | 2 + .../012.stdout.txt | 2 + .../018.stdout.txt | 1 + .../001.stderr.txt | 1 + .../006.stdout.txt | 2 + .../012.stdout.txt | 2 + .../018.stdout.txt | 1 + .../019.stdout.txt | 60 + .../038.stdout.txt | 66 + .../001.stdout.txt | 4 + .../001.stdout.txt | 4 + .../002.stdout.txt | 5 + .../003.stdout.txt | 3 + .../017.stderr.txt | 1 + .../023.stderr.txt | 1 + .../026.stderr.txt | 1 + .../035.stderr.txt | 1 + .../044.stderr.txt | 1 + .../053.stderr.txt | 1 + .../062.stderr.txt | 1 + .../001._manifest.json.txt | 6 + .../001.stderr.txt | 1 + .../001.stderr.txt | 1 + .../002.stderr.txt | 1 + .../006.stderr.txt | 1 + .../001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../001.stderr.txt | 27 + .../002.roundtrip.txt | 2 + .../golden/empty.txt} | 0 .../{ => e2e}/golden/empty_field_cat_csv.txt | 0 .../golden/empty_field_cat_ndjson.txt | 0 .../golden/empty_field_cat_table.txt | 0 .../golden/empty_field_count_csv.txt | 0 .../golden/empty_field_count_ndjson.txt | 0 .../golden/empty_field_count_table.txt | 0 .../golden/empty_field_export_csv.txt | 0 .../golden/empty_field_export_ndjson.txt | 0 .../golden/empty_field_export_table.txt | 0 .../{ => e2e}/golden/empty_field_head_csv.txt | 0 .../golden/empty_field_head_ndjson.txt | 0 .../golden/empty_field_head_table.txt | 0 .../{ => e2e}/golden/empty_field_ls_csv.txt | 0 .../golden/empty_field_ls_ndjson.txt | 0 .../{ => e2e}/golden/empty_field_ls_table.txt | 0 .../{ => e2e}/golden/empty_field_meta_csv.txt | 0 .../golden/empty_field_meta_ndjson.txt | 0 .../golden/empty_field_meta_table.txt | 0 .../golden/empty_field_schema_csv.txt | 0 .../golden/empty_field_schema_ndjson.txt | 0 .../golden/empty_field_schema_table.txt | 0 .../{ => e2e}/golden/empty_field_sketch.txt | 0 .../golden/empty_field_stats_csv.txt | 0 .../golden/empty_field_stats_ndjson.txt | 0 .../golden/empty_field_stats_table.txt | 0 .../{ => e2e}/golden/empty_table_cat_csv.txt | 0 .../golden/empty_table_cat_ndjson.txt} | 0 .../golden/empty_table_cat_table.txt | 0 .../golden/empty_table_count_csv.txt | 0 .../golden/empty_table_count_ndjson.txt | 0 .../golden/empty_table_count_table.txt | 0 .../golden/empty_table_export_csv.txt | 0 .../golden/empty_table_export_ndjson.txt} | 0 .../golden/empty_table_export_table.txt | 0 .../{ => e2e}/golden/empty_table_head_csv.txt | 0 .../golden/empty_table_head_ndjson.txt} | 0 .../golden/empty_table_head_table.txt | 0 .../{ => e2e}/golden/empty_table_ls_csv.txt | 0 .../golden/empty_table_ls_ndjson.txt | 0 .../{ => e2e}/golden/empty_table_ls_table.txt | 0 .../{ => e2e}/golden/empty_table_meta_csv.txt | 0 .../golden/empty_table_meta_ndjson.txt | 0 .../golden/empty_table_meta_table.txt | 0 .../golden/empty_table_schema_csv.txt | 0 .../golden/empty_table_schema_ndjson.txt | 0 .../golden/empty_table_schema_table.txt | 0 .../{ => e2e}/golden/empty_table_sketch.txt | 0 .../golden/empty_table_stats_csv.txt | 0 .../golden/empty_table_stats_ndjson.txt} | 0 .../golden/empty_table_stats_table.txt | 0 .../{ => e2e}/golden/empty_tree_count_csv.txt | 0 .../golden/empty_tree_count_ndjson.txt} | 0 .../golden/empty_tree_count_table.txt | 0 .../{ => e2e}/golden/empty_tree_ls_csv.txt | 0 .../golden/empty_tree_ls_ndjson.txt} | 0 .../{ => e2e}/golden/empty_tree_ls_table.txt | 0 .../{ => e2e}/golden/empty_tree_meta_csv.txt | 0 .../golden/empty_tree_meta_ndjson.txt | 0 .../golden/empty_tree_meta_table.txt | 0 .../golden/empty_tree_schema_csv.txt | 0 .../golden/empty_tree_schema_ndjson.txt} | 0 .../golden/empty_tree_schema_table.txt | 0 .../{ => e2e}/golden/empty_tree_sketch.txt | 0 .../{ => e2e}/golden/empty_tree_stats_csv.txt | 0 .../e2e/golden/empty_tree_stats_ndjson.txt | 0 .../golden/empty_tree_stats_table.txt | 0 cpp/test/tools/e2e/golden/stdin_roundtrip.txt | 3 + .../tools/{ => e2e}/golden/table_cat_csv.txt | 0 .../{ => e2e}/golden/table_cat_ndjson.txt | 0 .../{ => e2e}/golden/table_cat_table.txt | 0 .../{ => e2e}/golden/table_count_csv.txt | 0 .../{ => e2e}/golden/table_count_ndjson.txt | 0 .../{ => e2e}/golden/table_count_table.txt | 0 .../{ => e2e}/golden/table_export_csv.txt | 0 .../{ => e2e}/golden/table_export_ndjson.txt | 0 .../{ => e2e}/golden/table_export_table.txt | 0 .../tools/{ => e2e}/golden/table_head_csv.txt | 0 .../{ => e2e}/golden/table_head_ndjson.txt | 0 .../{ => e2e}/golden/table_head_table.txt | 0 .../tools/{ => e2e}/golden/table_ls_csv.txt | 0 .../{ => e2e}/golden/table_ls_ndjson.txt | 0 .../tools/{ => e2e}/golden/table_ls_table.txt | 0 .../tools/{ => e2e}/golden/table_meta_csv.txt | 0 .../{ => e2e}/golden/table_meta_ndjson.txt | 0 .../{ => e2e}/golden/table_meta_table.txt | 0 .../{ => e2e}/golden/table_schema_csv.txt | 0 .../{ => e2e}/golden/table_schema_ndjson.txt | 0 .../{ => e2e}/golden/table_schema_table.txt | 0 .../tools/{ => e2e}/golden/table_sketch.txt | 0 .../{ => e2e}/golden/table_stats_csv.txt | 0 .../{ => e2e}/golden/table_stats_ndjson.txt | 0 .../{ => e2e}/golden/table_stats_table.txt | 0 .../tools/{ => e2e}/golden/tree_cat_csv.txt | 0 .../{ => e2e}/golden/tree_cat_ndjson.txt | 0 .../tools/{ => e2e}/golden/tree_cat_table.txt | 0 .../tools/{ => e2e}/golden/tree_count_csv.txt | 0 .../{ => e2e}/golden/tree_count_ndjson.txt | 0 .../{ => e2e}/golden/tree_count_table.txt | 0 .../{ => e2e}/golden/tree_export_csv.txt | 0 .../{ => e2e}/golden/tree_export_ndjson.txt | 0 .../{ => e2e}/golden/tree_export_table.txt | 0 .../tools/{ => e2e}/golden/tree_head_csv.txt | 0 .../{ => e2e}/golden/tree_head_ndjson.txt | 0 .../{ => e2e}/golden/tree_head_table.txt | 0 .../tools/{ => e2e}/golden/tree_ls_csv.txt | 0 .../tools/{ => e2e}/golden/tree_ls_ndjson.txt | 0 .../tools/{ => e2e}/golden/tree_ls_table.txt | 0 .../tools/{ => e2e}/golden/tree_meta_csv.txt | 0 .../{ => e2e}/golden/tree_meta_ndjson.txt | 0 .../{ => e2e}/golden/tree_meta_table.txt | 0 .../{ => e2e}/golden/tree_schema_csv.txt | 0 .../{ => e2e}/golden/tree_schema_ndjson.txt | 0 .../{ => e2e}/golden/tree_schema_table.txt | 0 .../tools/{ => e2e}/golden/tree_sketch.txt | 0 .../tools/{ => e2e}/golden/tree_stats_csv.txt | 0 .../{ => e2e}/golden/tree_stats_ndjson.txt | 0 .../{ => e2e}/golden/tree_stats_table.txt | 0 cpp/test/tools/e2e/run_cli_e2e.py | 376 + cpp/test/tools/e2e/test_runner.py | 226 + cpp/test/tools/model_format_e2e_test.cc | 699 - cpp/test/tools/utf8_collision_e2e_test.cc | 438 - pom.xml | 3 +- 570 files changed, 33148 insertions(+), 4555 deletions(-) create mode 100644 cpp/test/tools/cli_internal_test.cc delete mode 100644 cpp/test/tools/cli_requirements_test.cc delete mode 100644 cpp/test/tools/command_e2e_test.cc create mode 100644 cpp/test/tools/e2e/.gitignore create mode 100644 cpp/test/tools/e2e/README.md create mode 100644 cpp/test/tools/e2e/cases.json rename cpp/test/tools/{ => e2e}/fixtures/complex_table.tsfile (100%) rename cpp/test/tools/{ => e2e}/fixtures/complex_tree.tsfile (100%) create mode 100644 cpp/test/tools/e2e/fixtures/recorded/001a55cd3aa30703.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/02e7ee891c98c640.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/04fb4d7ce9cd9f35.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/0a285e57e7770abd.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/0eef1509ca9d2e9b.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/0fbee3b1c70b3081.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/0fe32771aae23654.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/11b77be68feb2859.out create mode 100644 cpp/test/tools/e2e/fixtures/recorded/162d394b288bb12d.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/1692892e6fa59720.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/16a7de49cce86c65.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/19010534e83117ea.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/1b1a5cfd0890f477.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/21040fc546353838.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/21729ccbd4c9217d.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/25bf81a100c6d89c.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/280cb420cebd39d7.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/2b7847b7b705781d.txt create mode 100644 cpp/test/tools/e2e/fixtures/recorded/2ed856c16e47ccba.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/3098941db5f6f150.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/30eb087a88f388c1.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/31970968f7fa8f20.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/321afaf69e20bc17.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/32bf457d65422f93.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/32df682cd666de13.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/3497e1b9bed50133.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/3681eaaa9dd04162.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/38d1a142bdf82d96.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/3a22c3d57d16053e.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/3f705604910a155c.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/3f73b03698921151.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/4437ed311b6ffac5.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/443d44fab5249879.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/462be7cd53efb021.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/4c8de02fcad64c24.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/50568f65241e50ce.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/5077671e7b6996b9.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/59b2d6c45e72adb4.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/5a1ae43282c6e8d5.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/5d51538ae37766cf.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/5fbbb88cc56b243a.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/627d54d74200f724.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/65f89edd125782e8.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/6814760cd5c03c70.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/6e073691a8e066e5.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/6e07eb49b34dc35a.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/74123c6ba2cf9a64.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/77d5cdbf284147c1.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/7a5d81e3af50bc9a.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/7c94f08bcfc8bf1f.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/7e91ad7bab6c76d5.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/80388eb9de4a9e91.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/856f46a20c5f7c7b.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/87d4e8b040a0e258.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/891a43b84b1ac825.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/89472d6be3e8a4f2.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/8b4b9aa145a1d812.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/8c384af9ff83865c.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/8cd34bf42ce458c6.txt create mode 100644 cpp/test/tools/e2e/fixtures/recorded/956fbe6974cab2b1.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/9b943a465ab2e97e.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/9f14fda22c4e2ba7.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/9fe4acf66641a6f7.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/a3888eac21f087b1.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/a520e2dad89980a5.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/a7e15add9795acb0.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/ab6e968534a7e087.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/acd5b9243a38e4f8.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/b32ffaa9b5e49e11.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/b6251665e053a224.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/b7aa5a377f9d473e.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/bac2896165b44e56.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/be1a2fdc5942bebd.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/c084f0d9b5cc00bc.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/c1a66b9d085b4360.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/c7da5b75d91e3488.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/cea175b2e6fa8cdb.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/cebca58ed56e0aab.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/d083ba5c0e6a1b67.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/d7b0a040cecabf8d.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/d7b49e2bdcff8bb2.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/d97187a52ca24996.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/dc7368474f850fc0.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/de21dc67151aafff.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/decdfb5a1f49df91.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/df3a55081911cd32.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/dfb06bb1a4e09036.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/e2ca60a29f45f9e6.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/e47f2cf974f4288d.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/e5721dc3ee3437dd.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/e7c20447ea054908.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/e7e0024a5247b1f7.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/e8c9ceba19eff9ac.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/ea9c53e37f6ee36c.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/ebbbc7b819bea734.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/f23d8f69b526430f.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/f6209221447efc09.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/f65a26f837b23e39.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/f70c095c6ba45072.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/recorded/fda14729ef2687ab.csv create mode 100644 cpp/test/tools/e2e/fixtures/recorded/ff981d1dcd989b10.tsfile create mode 100644 cpp/test/tools/e2e/fixtures/stdin.csv rename cpp/test/tools/{ => e2e}/golden/category_edge_cat_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_cat_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_cat_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_count_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_count_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_count_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_export_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_export_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_export_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_head_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_head_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_head_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_ls_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_ls_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_ls_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_meta_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_meta_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_meta_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_schema_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_schema_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_schema_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_sketch.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_stats_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_stats_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/category_edge_stats_table.txt (100%) create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CatFiltersRowsByTagEq/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CatPushesDownOffsetAndLimit/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CatRejectsMissingOrNonFieldProjectionBeforeQuery/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsDefaultToAllTables/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTables/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CountAndStatsProjectionMayMatchOnlySomeTreeDevices/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.CountReportsColumnCountsWithoutSummaryRows/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.HeadFiltersRowsByTagRegexp/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.HeadProjectsAndLimits/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.HeadPushesDownOffsetAndLimit/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/005.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/008.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/009.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/010.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/011.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/012.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/015.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/016.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/017.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/018.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/019.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/022.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023.0002.ndjson.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.InvalidUtf8IdentifiersAreReplacedOnlyInOutput/023._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsMeasurementsFlag/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.LsRejectsNoHeader/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.MetaRejectsDeviceScopeFlag/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.MetaReportsFileHeaderVersionWithoutConstrainingReader/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.MultipleTagFiltersHonorAll/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.OpenMissingFileReturnsFileError/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteColumnFlags/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.ReadRejectsWriteOnlyFlag/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.RowWindowDistinguishesExactAndExcessiveOffset/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaRejectsMissingTableBeforeWritingOutput/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.SchemaTableMeasurementFilterOnlyShowsRequestedColumn/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.StatsRejectsRowOnlyFlag/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsCountAndTimeRange/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.StatsReportsNumericNullCountForTableFields/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagFilterRejectsFieldColumn/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagFiltersDistinguishNullEmptyAndLiteralNull/005.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TagRegexpUsesFullValueAndRejectsInvalidPatterns/003.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TreeCountAndStatsUseDeviceTimestampUnion/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.TreeHeadWithoutDeviceUsesBareMeasurementNames/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsInt32Boundary/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAcceptsOneLeadingUtf8Bom/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteAllowsSameTimestampAcrossDevices/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatAndExportCsvPreserveQuotedLineEndings/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteCatCsvWritePreservesLeadingBackslashes/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDateRequiresStrictIsoLexicalForm/004.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteDistinguishesCsvNullAndEmptyString/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailureOnBadValueLeavesNoOutput/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteFailurePreservesExistingTarget/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteImportsQuotedFieldWithEmbeddedNewline/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMapsEachColumnToItsOwnValue/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMissingColumnsIsUsageError/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteMultiTypeAcrossBatchesRoundTrips/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteNormalizesNamesAndHeaderCase/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsBadDate/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDoubleOverflow/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsDuplicateColumnNames/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsHeaderMatchWithNoHeader/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsImpossibleDate/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt32Overflow/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInt64Overflow/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsInvalidUtf8AndMisplacedBomWithoutOutput/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericInt64/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonNumericTimestampColumn/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsNonStringTag/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderAcrossBatches/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutOfOrderTimestampsAndLeavesNoOutput/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsOutputEqualsInput/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsReservedAndControlCharacterNames/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTagOnlySchema/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRejectsTimestampOverflow/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsQuotedSpecialChars/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteRoundTripsTimestampDateBlob/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteStreamsLargeInputRoundTrips/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadFloatDoubleRoundTripLossless/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteThenReadRoundTrip/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.WriteVerboseEchoesConfig/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliE2E.ZeroLimitUsesEachFormatsZeroRowContract/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/005.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/006.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/007.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/008.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/009.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.CommandHelpIsSpecificAndDocumentsSyntaxFieldsExamples/010.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/003.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/004.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/005.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/006.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/007.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.DuplicateSingletonOptionsAreUsageErrors/008.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportForceRejectsSymlinkAndSpecialTargets/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0001.csv.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001.0002.csv.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesMultiObjectManifestAndNumberedFiles/001._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.ExportWritesSingleObjectAtomically/001.tsfile_cli_export_205.csv.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.FormatVocabularyIsTableNdjsonCsvOnly/003.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadAndCatRequireScopeForMultiObjectFiles/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.HeadCatAndExportRejectOffsetWithZeroLimit/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.HelpListsExactlyCurrentCommandSurface/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.LegacyColumnsOptionIsRejected/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.LsReturnsModelAndObjectFields/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.MeasurementOptionRepeatsAndRejectsCommaLists/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.MetaOnlyReturnsSizeFormatVersionAndModel/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.MetadataFailurePrecedesModelOptionValidation/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.ModelDetectionPrefersTableSchemaAndFallsBackToTree/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.MultipleTagFiltersRequireAndHonorTagMatch/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.PositionalFileMustBeFinalUnlessAfterDoubleDash/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.SampleIsNotACommand/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.SchemaReturnsFixedSevenFieldContract/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchRejectsRegularResultFormat/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/003.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.SketchWritesStdoutAndAtomicOutput/005.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.VersionIncludesConcreteBuildMetadata/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/004.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/005.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteAppliesAndValidatesTypePhysicalOverrides/006.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteCsvNullAndEmptyStringRemainDistinctTags/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteMapsInputByHeaderName/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsExistingOutputWithoutTruncating/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsHeaderShapeErrorsBeforeCreatingOutput/003.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsImplicitInputAndFormatFlag/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonCanonicalTimeLexemesAsInputErrors/003.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsNonRegularInputBeforeCreatingOutput/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteRejectsUnterminatedQuotedCsvField/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteTargetFailuresAreRuntimeErrors/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/002.roundtrip.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliRequirements.WriteUsesExplicitTagAndFieldOptions/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/006.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/009.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/013.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/016.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/019.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/023.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/026.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/029.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/063.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/064.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/066.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/067.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/069.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/073.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/074.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/076.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/077.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/079.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/083.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/084.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/086.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/087.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ObjectCollisionsDoNotRequireMatchingColumnNames/089.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/005.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/006.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/007.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010.0001.csv.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/010._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/011.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/012.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/013.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/014.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/015.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/016.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/017.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020.0001.txt.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/020._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/021.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/022.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/023.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/024.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/025.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/026.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/027.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030.0001.ndjson.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/030._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/031.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/032.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/033.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/034.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/035.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/036.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/037.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040.0001.csv.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/040._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/041.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/042.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/043.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/044.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/045.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/046.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/047.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050.0001.txt.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/050._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/051.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/052.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/053.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/054.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/055.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/056.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/057.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060.0001.ndjson.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.ProjectionAndSeparateColumnScopesRemainValid/060._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/004.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/006.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/007.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/008.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/010.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/011.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.StatsChecksMergedTagHeadersAcrossTables/012.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/006.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/012.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TableFieldsAndTagsFailBeforeOutputAcrossFormats/018.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/006.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/012.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/018.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/019.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/CliUtf8CollisionTest.TreeColumnsFailBeforeOutputAcrossFormats/038.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/ComplexTableFixture.CsvAnswersMatchByteForByte/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/001.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/002.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.ControlCharCellsRenderAsVisibleEscapes/003.stdout.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/017.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/023.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/026.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/035.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/044.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/053.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.EmptyTreeAndInputFailuresHaveExactDiagnostics/062.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001._manifest.json.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.MultiTableCorruptionStopsExportAfterFirstObject/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.NonPureFilesAreRejectedWithExactDiagnostics/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/002.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/IndependentFixtures.SpecialCsvInputsHaveExactCodesAndErrors/006.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/RunCliTest.CommandHelpMustAppearByItself/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/RunCliTest.LeadingOptionBeforeCommandIsClearError/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/RunCliTest.SeedOnCatIsUsageError/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/RunCliTest.SelectIsNoLongerKnownCommand/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/RunCliTest.TopLevelHelpMustAppearByItself/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/RunCliTest.UnknownCommandIsUsageError/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/RunCliTest.VersionMustAppearByItself/001.stderr.txt create mode 100644 cpp/test/tools/e2e/golden/e2e/WriteCommand.SuccessfulWriteHasExactSilentOutput/002.roundtrip.txt rename cpp/test/tools/{golden/empty_table_cat_ndjson.txt => e2e/golden/empty.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_cat_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_cat_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_cat_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_count_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_count_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_count_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_export_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_export_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_export_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_head_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_head_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_head_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_ls_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_ls_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_ls_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_meta_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_meta_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_meta_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_schema_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_schema_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_schema_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_sketch.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_stats_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_stats_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_field_stats_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_cat_csv.txt (100%) rename cpp/test/tools/{golden/empty_table_export_ndjson.txt => e2e/golden/empty_table_cat_ndjson.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_cat_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_count_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_count_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_count_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_export_csv.txt (100%) rename cpp/test/tools/{golden/empty_table_head_ndjson.txt => e2e/golden/empty_table_export_ndjson.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_export_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_head_csv.txt (100%) rename cpp/test/tools/{golden/empty_table_stats_ndjson.txt => e2e/golden/empty_table_head_ndjson.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_head_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_ls_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_ls_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_ls_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_meta_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_meta_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_meta_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_schema_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_schema_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_schema_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_sketch.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_stats_csv.txt (100%) rename cpp/test/tools/{golden/empty_tree_count_ndjson.txt => e2e/golden/empty_table_stats_ndjson.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_table_stats_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_count_csv.txt (100%) rename cpp/test/tools/{golden/empty_tree_ls_ndjson.txt => e2e/golden/empty_tree_count_ndjson.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_count_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_ls_csv.txt (100%) rename cpp/test/tools/{golden/empty_tree_schema_ndjson.txt => e2e/golden/empty_tree_ls_ndjson.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_ls_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_meta_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_meta_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_meta_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_schema_csv.txt (100%) rename cpp/test/tools/{golden/empty_tree_stats_ndjson.txt => e2e/golden/empty_tree_schema_ndjson.txt} (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_schema_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_sketch.txt (100%) rename cpp/test/tools/{ => e2e}/golden/empty_tree_stats_csv.txt (100%) create mode 100644 cpp/test/tools/e2e/golden/empty_tree_stats_ndjson.txt rename cpp/test/tools/{ => e2e}/golden/empty_tree_stats_table.txt (100%) create mode 100644 cpp/test/tools/e2e/golden/stdin_roundtrip.txt rename cpp/test/tools/{ => e2e}/golden/table_cat_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_cat_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_cat_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_count_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_count_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_count_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_export_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_export_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_export_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_head_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_head_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_head_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_ls_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_ls_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_ls_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_meta_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_meta_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_meta_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_schema_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_schema_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_schema_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_sketch.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_stats_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_stats_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/table_stats_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_cat_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_cat_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_cat_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_count_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_count_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_count_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_export_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_export_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_export_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_head_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_head_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_head_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_ls_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_ls_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_ls_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_meta_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_meta_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_meta_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_schema_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_schema_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_schema_table.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_sketch.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_stats_csv.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_stats_ndjson.txt (100%) rename cpp/test/tools/{ => e2e}/golden/tree_stats_table.txt (100%) create mode 100644 cpp/test/tools/e2e/run_cli_e2e.py create mode 100644 cpp/test/tools/e2e/test_runner.py delete mode 100644 cpp/test/tools/model_format_e2e_test.cc delete mode 100644 cpp/test/tools/utf8_collision_e2e_test.cc 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 0000000000000000000000000000000000000000..b117298dba3a7002a7fa3ebd33a35955ea0f7fa5 GIT binary patch literal 446 zcmWG3cFW93Wno|vD$36<(JM(UE@4SAWaY?7O)KGJWM|Rj(U)LgWZ(~A00J&lWk#%A zMVaXtC43C*3{ntv3?Oxkj4UA4$bg9fY$78EBeE!z%>|^9F-RE12LUk#h#d@YoiGy^ z8R0C5QU+T_uq9Al29#dN%m_6CBCrrDewLXL;b$gP|HG7^h#EmfpFrt9F#8$OWdy)t zObiV`nvubQfk6Qx(%`_r(ZIyYCX$+$TvS<5;+8T(UT&ZQLc_r~BnYpPPaP`bU7HfWa zUTP6HT#O0GVkyonNks^O3WF;iOCtMdL_kaK&R?KW%WY+T>YGbA_GEPT_m7lK0x>7Fc|=i-5mn<7XVDYFt`8! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..420a52c4f3f2109d98613f7bf59246232095e26b GIT binary patch literal 203 zcmWG3cFW93Wnp1J156BzOeG*urpy#>6gifp#FYO`a3Mw@3ncUpRfr8J^nU+dR6&p? z2?jQi)V$=P%7PN_)JjG%C_ALGAk{0sC|xhHATc>3Rj;Ht4d^aCsH|S7pR1p9P-H-e WtBV9w%qO)hHHXOnXyl3zuqOa004jI@ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8b737931872342f49c71fabffe07ec8407123c3a GIT binary patch literal 1034 zcmWG3cFW93Wno}qO5{q*EGjN(W#D0BXOZBNV_;+mU|?Wie&NcKl$i2<|6YD31_oYU zpb%pNkN^QKR}P@mKU@<3u}FX{;wer|&d*E1u<0dLZDN7A5kUf-&&I(B;WNKLr5OYn zpuS|nsYDBE6b9|!im(L8Qf2^$3grgbferdkxk2H`K7R@IIh1Co#`HP55)2>1LITa_ zz34tC*Ps>XJ}1|pgV6Y9V0Z&@GvhO6m=NPLh!E2QW=5t&CU_2ji6T-eROB;+W@cjq zss|-6rpy#>h!~V)0cMB)z;p%$Ae%r!|4@b4Ao&SZ5Txa`0teGW4wi%og1}71u!zB- zQ9*&Dft`VYm4RmihXNy$LIV>kn@DP2a#3YLiFaxxqZpJOQdyAdm0y&umspUPoRO+m pQk(|N)_PD`y-+__Kj)yxfDl&~38) zhyVgH28d-0aGfw~m|zT`^B};25o`&Rmjk6QGBYCl$B61zm=Y-c0%j6Jw!$Q^7!yMa zRE|Lb#Nc3P08tDK4h>AKY$B<7$wid~CElr(jABrBNM%8)SAJ2tUSdIFaz?6NNpTu5 lkoBOldZB)PRp)UwnZCIg_M%R<000s!5IK;!@b literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..37015a90ef69f5840726e5b696f619bbfa08e2d3 GIT binary patch literal 451 zcmWG3cFW93Wnp0ED^ATT&MzwFOG?em%FIh=DKczj5M^U$kq{1LU|?Vb!UfDPfGi+j ze&NbdlA2q<$O7bmFbZH|U|{0_5+DH6!F~b4XOLk4>tx}8^2w&m8DUyOpp0G2j4)3y zV)G768I(TD2v^Pw6k;jPEJ@{t%0VcWqWt_^G$D|;5k7{wAy@$%3>*vs3=9om%?=<^ z0LW!v0D6_9p@E5&O(Zohxu~+B#5=W;Q4GossVqqK$}dXSODsrC&PdfODNX~%haOZ` gFVxS~&p9YEAjH*00xIT{T9%r_WB@eyO$a#h0NWZ!_5c6? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f52e612493725ebb1822a57ce749053a1b7d8bd4 GIT binary patch literal 579 zcmWG3cFW93Wnp0AD9X<-VM<};NlHw4zkjbX69a>yq67n0!2AL#ti{R!RQ`_?#s7&^ z%z|z+69d#~OdO05IhZqGG=mn*S?IKbD~f3X3}9zdZje3Lp#PK`l*0)19MqkwAv9wL zGb1=+7-8`P6Nl0Zp+UjGuu2vv#O1)yzyL&0QAq|B1qKHO1`Y;}1}0WEk<`58qRN62 z@6<|0F(^BvvLMwfzbIWVu^=%yBUP`YI1QK{^q{hOp?veX3Rj;Ht4d@6xsH|S7pR1p9P-H-etBV9w S%qO)hHHXOnXynuou!{kkUnn>L literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fca4a8bce23d6b751a14f1ac77cc782c6f49166c GIT binary patch literal 794 zcmZ{j&rZTX5XNV>YsD%tAw@VC(t`)^(8wD!fs*(qq%qaRlR{aQgeU<*!i@_T6A~Z5 zhvA^F;@vlJ+MR7hber_+{AOpq-F6#}Tm69)z{R9)_2l%nvw%HwTa>K|FbE(Xz8Kf{ zIY2&-0h`ANhn3ZI7huOVg=^#tuUD2#!62?JVQsO9gs%wOq?N2kwBc*~?OPR8oC>x# zbJ{Vb^iTj?0sl8`(X?&m%XN@;yr z--pIpt2BK>y(VRpyy?ZkhXSl-XvAuSmKj3Rj;Ht m4QP-aR8}w4&(+U4C^8_#)kOj-=95~Mn!{uOG&nK@Y%2f?^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5687cc8c12289827a4498a25110175ed9eee4a48 GIT binary patch literal 1468 zcmbtUK~BOz6#X+T&>+M}jIz>1-G~Vxt|e(Ab)g0uQ#Ec(+A<&sK|+y)9ShyL@dh5j z9ec0g1>h3swEd;E1%fb(ndzH9Z{Ga=d75=rZ!i%k)sxkF+v>bRDxMIt$sHh|0)Q}7 zBtx(KtW$t=nggWIJG^{*YcP zqIX%Qx1io|em@<(gOl<-QH5U@M1?~lOVlN)*8w4VFNwG+%!Nc*n<6@Bm_+SySt%*0$ zB%Dd$Gg_~#IgrlpRu8km{9Rl&+UpkeHm2s#j8+ m1~fLLLZ^GPjB&0#VC8XOq{wiN)EG$7yr literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..461d892a17e716ce6d118bb069d6f6991dadfa99 GIT binary patch literal 521 zcmWG3cFW93Wnp0CNlHw4zke?)S5anqMu{>L1B0TX1OryU`~oVh#lXk`)b^j1BPTVD zSUoK0W->8A>}29#gh;{6htUjLaQh$(IN!k)#V`Q|utO*}$dwV|B&g{vQ2HD*BiI5M z7eX_NGc!R$j}aD(Fc~PV4+$qm2n7>_(r!?1GcYvELxdOV^8b`Z)(h Z286h}NI=DWQp-|vm<)hc>ok$CZ{@R9w=^z{AGQBEcocz{n85z`(%#!j-EiGd-h(pNWBi zmlr6)*Z?FzKntpor#Lk^KQ9GC=SxC5|KqfhBPTTtw~haC+lWge3&hC?66hN?4n_!{ z`2{M?Ai@CgGZRh~T2PZPXa`q>9YB^EvNbQE)<9_nKMZToRbUtovlh*o1Y~Q_ebdeW z4i(BhGZWbsbf+Fbw*_4Rv3|J(jTHulzYyOtrZB^V7*n7^rx8M@Awo=sa3Ll`sL*s~ zNYZ9PPT?>)h!`{}K?PSq>Aj4gEb$+r51LG2Qeb_sBnTC}0Hq%@LS%udi-9RKg&QIa zC0Rg;8YBY&U@QJ%Rmlp@aY#y`TK*`oD1ev=Ds4;&hBA!;3=K@cpy6<4VNn8F$SBm> zz{JWXlA4!XR9R5som$B#24#m-7NmOR7p3bZ79=KTr0SIvrvbCR9#mE@)X&w=IVdt9 Y#MMOtD&~_~mYTz40L<@>A>eWX08}oOumAu6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b1c2ee2514b5b0b1c0ddded3cf56fc842aaeb2f3 GIT binary patch literal 729 zcmWG3cFW93Wno|vDo)KS&MzvCPn3eQ;!6_KTN!xR*jXgF5y3}cDKY>Z!h}gl9to6DylYYF=_tWkHE|Y9*r>lpRu8km{9Rl&+UpkeHm2 qs#j8+227=TP+7fDKUY8JpvZs_R~HGWm``e1Y7WQ}MyC*Pk_G@umuf2j literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..acf421a495d4a2639b5f5bc25ffedd7130f74ccd GIT binary patch literal 17 VcmWG3cFW93Wno}o_z(hS0st>)1%m(p literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8c6f7892e8adb90684d26902ec7b4304522f1b21 GIT binary patch literal 568 zcmWG3cFW93Wno}sN@V3pN=$jbf3GqV1B0TX1OryU`~oVh#mWIx{*M&J|A|!0f^IVt z1Jr3u9E=b-m@{BBgBHwL=(K|?ifP;oU}sZqkQLaV|CAe)&It7!)Sb&9G-ER}FiseO z7{-UvbD%-Mz_3)F!2u}f0mKdr3P8xf(7*tq961>nIT#o?8kktwL{jsTiz*9Byi+R~ z#h~nv%7Rp{{GxQd#Dc`+j8wgn;xu3)(1XhAh5EVrIR`}sgt)p$K*fAg%TjZg41hLF I3IV4W0NLV6{Qv*} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3ae71415eafb0b38b81da3afad4359fb7488d179 GIT binary patch literal 729 zcmWG3cFW93Wno|vDo)KS&MzvCPn3eQ;!6_KTN!xR*jXgF<2#3%#_w1tg>5y3}cDKY>Z!h}NhV;}!UYg^Bod<OyDU_P0r6tL8UMZd5PN)7KmX85@-(_2P1^f`~sC`kY#|lh6$$%EvQKt zw1X?c4j@Y(*_xM7YoIhk5{5PCDlm+PS&L>(3DhSH3=1GC7}=R&LX7NCp*&_rrV=Ks z@c~nTE2yFJjZk_DBhVyJkg_Btru^rIh(bw_&_7fmHlWb^{d-XbS;6rQj0PxxId{H1 z0|OHS69+>BNWwt~h=GZOL4kpTg-Jyb$ZKF?WfMuwOD?J`DDh6MWE6w4Ln;eWz4D9F y^%4sblQUBFN{Z8f2~ZCzs~76$>gOC384%*?A^{ciNi9pwVKM+FHn9+JY6Soymub%c literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..47d0dffba5ad787d9dd59bf26c468a0f287aea29 GIT binary patch literal 588 zcmWG3cFW93Wno~H$f!&z%1ntbNleN~ZDrtLV`q`zl4D?G2w(sKSFWb0VE0pObkq7Mfv$9dJz3ADTb^NrF@L+ESfy}5-|#MtNo? zln`V@4N#aWC~d@u9A=E@AqZ0irM=J$138Kn933#9BV1f7&*H$q07Os#Qo$JDz~JD( z(9r;l0EY%9RyL8;yyT+Ff)el4N=7j#JEXE8)hoX!T`#d9F*zeuucSB)m@xF9vU;I@ eu71uzkpUsDE)q~NpVYF{93}&x1wTT-sR#ftBwU;T literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bd4538893980af280bf41ed9e1e3e7417bacf6ef GIT binary patch literal 470 zcmWG3cFW93Wno|zO3u&8$t=#y&*MtVEGjPHDNaq!&r4}#;9+BDk>HYJU}Okj00CF7 zvc#OyRDLD~23}qupRoZX3Itj#5E?-Om9TLzBKRmQ1qO&gOgL3&LDgf>4z4IB8NscH zgNh$zW<>ah5trX!ilOukMkGzlKtYzI#FYQsP+15C68eWK#0m}$pjV*)=9pM{pa~2N zKnVqy6j%`#2as|AiZ(E@vWcYTB^Ol|lz69BGKxXjA(aKGUin4odWi*z$r-77CBV^8b`Z)(h286h}NI=DWQp-|vm<)i{dVX^ z3=9em4NR(0Vo-KSWkIS}eo?w!VnJeZMyg&(aT+jz=s{)mLj7F* coP#0*LR?)Wpkh9$WvMw#20-(#gn&~M03EMW8~^|S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4c49461e1863dbbc1a7455470a05528e16d0ef1d GIT binary patch literal 538 zcmWG3cFW93Wnp0AD9X<-;Y&#^%S=xF&&pSpm{XeiutAxLfk9DGf&o9!f@z)X;^=LPVi~1{HLJ((!PQPmyk5VgQE`qksTd zRs*7@fq{Xsfr*t(BsDL&sIs8MJGGKg49X6vEJ*drFG|--EJ#ewNYyJTP6I}>9#mE@ g)X&w=IVdt9#MMOtD&~_~mYTz405p1I2slju0PiSUf&c&j literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..106bace75a8ea83a6ca1bfbb494281ac4516d9af GIT binary patch literal 1134 zcmZ{kO-sWt7{`;etD`!cQe<9c6%RW|al@m`;x@q-#u)YBN%j(TP-fZYV7DO(evaX1 z@a(q`_6@xG4K!_^v<;~_^q>5mmp@6HI^(l}OI1YFNg2PQHEl&L=tYE43;Cm=j?3!= zpI_eDlM_n<2nc zB|=j`%NQ*~M5+-Y(2y)*vVk-rG%NZIxm;q8F%K}5PhPJ9x4*#O$0 z6#LEn4J(6wc{QZ)Bn8#{{xmmC8lLjVH<1M>@4uA%(m$E{!Y@M3SDEG`>)MZv+4hmnD$feDl`of#Ao z7+9DDg@AlkHj&i4soIU`lCq&N*&4Cp~+^+Nqz d{hWg$143L~B%oqGsb#4-Oa{Q5?->FvGXUK4oK64$ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..efeea559faffd5987bfff15ae2ef33395975559c GIT binary patch literal 165 zcmWG3cFW93Wnp1J156BzOeIV}L6)S%l>gi)vLK;D-+5I*w@RGLAM0qSNZ zoJzEyMq$tnt_VwjEM*3;A1OD;4%xvkp$>-93`v*{MpuI2P?!hM99)9#U~&!WhlVZ# z!!C$bjM>aEA;xTo5R(iuBU1?zJoUgt5z!A7(TCDbj6n6wKn_!83O7UyO0s~G5-?Vw z0Av#zB;lb7g5-B9G%!ryZ(w0)VCZ0XaBzX>5n$jD5CH08WYA!0U}9wxNzF?xsw^n+ zPOW4VgR(;^3sSxEi_-NH3lftvQuRuT(}3w;4=Sq{>gVd`926N4;_4y+74u0gOU+?2 L09x@p1e{p_v;u8{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9e88ca06a1077cda08dd4cc53358f180385a0df4 GIT binary patch literal 206 zcmWG3cFW93Wnp1J156BzOeG*umZZd#|J*3DAfbP#LTo^x_xtyv3bK|Z=9H!~!Symi zSrQCvBB^=FMU@35-l>(0Vo-KSWkIS}eo?w!VnJeZMyg&(aT?HRdQe%tP(N2c=b*@d Y5LXuosF+V`S!xcG0npghAz*(106au1-T(jq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..45b914f78571e78b3f915d8b85c58734b8e42ef7 GIT binary patch literal 508 zcmWG3cFW93Wnp0EDM?JqNi`J9Ofig4%S_Eli3hQbplqX71`#%P773v+1_lNe21bSn zj6en$xUv)*>N7Dg=;{KwtUsWlFp3Mx5P{NiP+EfprUFI-jbP(oh4G*?OqB)$&=w|~ z(lA{bFb0&?aEL?^ae}+L8!G;unGx!9MnXXV(*dCwnHXU@nSmnAz;NS+s(?^H5hGL) zCZHGKN?AvVp0AiIq(xH7~iSvY^B}wUSW`$_}Y4NcGAu yO4my)NKDR1)hj7Z14g7CR8}w4&(+U4C^8_#)kOj-=95~Mn!{uOH1|UYIMxACM@g*! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..864f7d9082f2b0746864ed38baf91eabfc8392f7 GIT binary patch literal 190 zcmWG3cFW93Wnp1J156Bze8s7G#rZ|W%s?rY;>?m%ZWJ{vMfv%;XhJ2axdjNL7@_JV z7}!Ko^OB1y3rf6GD;dS0?2yWWRImJ^biKra#N>=ry^`WIpi}gqvU;I@u71uzkpUsD WE)q~NpVYF{93}&xv9m+K?gjwThbfQ% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d68676cd80961b4956acdd122743219d171febea GIT binary patch literal 408 zcmWG3cFW93Wno|vD$36<(JM(UE@4SAWaY?7O)HULWM|P7OOs$=U|) zhyVgH28d-0aGfw~m|zT`^B};25o`&Rmjk6QGBYCl$B61zm=Y-c0%j6Jw!$Q^7!yMa zRE|Lb#Nc3P08tDK4h>AKY$B<7$wid~CElr(jABrBNM%8)SAJ2tUSdIFaz?6NNpTu5 lkoBOldZB)PRp)UwnZCIg_M%R<000s!9`K;-}c literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d3193f33ef53c1958a8f5503a9f4dbbd6dc2eb8b GIT binary patch literal 1042 zcmWG3cFW93Wno}qO5{q*EGjN(W#D0BXOZBNV_;+mU|?Wie&NbhmY7qT%Fo2Wz{?91 zVQc^rAfN@(#Z#P`oS&D1q3tDJZAoNVmPCeSED*OMNT4^^I2a*(<`<|mgCGOMvrITu zXhBWFpdDNhb^uw*$kx1sS_7pSJTR<5SAk(X%vv;SqL8gY_e~v!HRvjcwPpgcHRx{L zieU}93SzA}4viNEhR+cHGDb1OgcyNd1p&r`2%&=zAtnvD5R(Q}sGk{_IGNzd8YYTJ zu~3mkPlpRu8km{9Rl&+UpkeHm2s#j8+2F%`iP+7fDKUY8JpvZs_R~HGWm``e1Y7UbD LFkE#*z-0jdgl~k3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8ab72f6982c27cec7e8d335311be018777a3e1c8 GIT binary patch literal 1034 zcmWG3cFW93Wno}qD&b1YEGjN(W#D0BXOZBNV_;+mU|?Wie&NcKl$i2<|6YD31_oYU zpb%pNkN^QKR}P@mKU@<3u}FX{;wer|&d*E1u<0dLZDN7A5kUf-&&I(B;WNKLr5OYn zpuS|nsYDBE6b9|!im(L8Qf2^$3grgbferdkxk2H`K7R@IIh1Co#`HP55)2>1LITa_ zz34tC*Ps>XJ}1|pgV6Y9V0Z&@GvhO6m=NPLh!E2QW=5tGCU_2ji6T-eROB;+W@cjq zss|-6rpy#>h!~V)0cMB)z;p%$Ae%r!|4@b4Ao&SZ5Txa`LIcBu{00_=28IrH4+j^9 z29O#d1`Z(s76v{>1`VeMCRR3))V$=P%7PN_)JjG%C_ALGAk{0sC|xhHATc>3Rj;Ht n4VbOM!BF-JP|_t10*C;P1GRKs^Ml^79}A<+Qx*$0~fFU4}S#F zcryMF11GPZ#MyTFYQY$A54+npv+s4L+o#$4)f$t5QaxO$TDJ25ki%}hm?{-9^z!F(dxDs%VCZ{Vpf@3auV+ku zz5i5_y@m{D>{Uo1-m}yhUtt;ChSI4CDM1uibLvn6cgazeu22yx9QalI2?6%Ls!ydf zs^YKZ9z-AKujUclFFZfdlS|Z_pXhb8a)0|if|dJI{@UR$f8{e0krjXCvl6An-34;# z-3ro{22k6BXmS8iyor2Bi2)=fJV;)b&?V@=Ui#?JIs_t`C1(jWFkM)L2xf=BvOu^s z;gC(j>2XJ^<+fCBJn>@(_hc8s1xUA+*YFO{>{(j#!hdiM`fru*14_ozWY*dBZY}T|pzx eh-l`#pceK{OGQo1#|3uG?pTfPqUed{y7mutZLFsN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..33609b39eef3421dd9c0a60552dce912caa97fea GIT binary patch literal 737 zcmWG3cFW93Wno}sN@V58NlhzJW@2DaRFq)A3YcF&g|&bhl300?5>wvq-%F$xRt})@ zf21h>Po!cNbjLC=fc?V6!3dFoxf@0^Xuok$I4ZdnVwOi%*4Q;s3^gJ6)?Ym3Tr_${b%LKNlhbG4-2}P zObie^nK&3BQZVyjG=mo0J_rNOcW^~9jE@2A5Xud5W`sBiYI+ltKEuoiwgAS3(2SzY zOyIC%gajc>6iVxYMgK!2|HA~Kv=ry^`WIV0`L9W%WY+T>YGbA_GEPT_m7l SKB;A?IZOsXW4DHYBOd_F<4Lms literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cc5d4adcbc0125b5a934fc6ee460acc8f49f6c49 GIT binary patch literal 729 zcmWG3cFW93Wno|vDo)KS&MzvCPn3eQ;!6_KTN!xR*jXgF`AAK|83R7-Njj zjuiZMh(JxkpdCz5>?ni#VLn8hk(n7L#K;U4N@qrj1V$t_JTwzQp$StBrK=d>F_(m- z2`vg>ilKBbvPxheGcaeS7;-}-p(GP9Y~cb3I}(Xe4b?YKp@G2x#BSkaU@~xEXkbua za$#Ul011JB$AktZRyL8;yyT+Ff)el4N=7j#JEXE8)hoX!T`#d9F*zeuucSB)m`e4a ivU;I@u71uzkpUsDE)q~NpVYF{93}%`f^-T2CusnYHYJU}OkjU|?W=;mVVgnDT!AUVbJ923}sE z5Mu+700Avm4xrROToV7WNU%V3B1oX2Y#fXbKJyDynn8d8YBv*3C0bCUFlYx?ge5?h z5(C(+lpACVHt0X)28BU=&A`wIaVcXpGb1<_7-5kC6Nl1$a2*ZuKp`#%h6V;8Vg*Sv zGDtG0C@?rMGH@|)Ft9W*v9gJz<|P+Z7L<6WRx*k~*&&q$sb2X->3WF;iOCtMdL_ka m!06Y5%Ibysx%xQ=MFxbpx=299d{WC&bC?W(R?G?krxgIdvrVf2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..82e82b1e09dd8196ed490f08ff997938210a2b24 GIT binary patch literal 597 zcmWG3cFW93Wnp0AD9X<-5lYU_$;m9v%+F)xNlHw4zkjbX69a>yq67nez{$!1RQ``R z#q40k|A|wq#e!}#69d#~OdO2pa!@`eF4{o}MTZ0f*x9%ZVuvcnpdDmT3~~n>^dGlD zT2SQ}w1X>(K_!e(&p|~uLukec%#7d&VnmN8m^_qT2@jG@@(PMjLqL>*fCGa9kOoF4 z!vcjC28NafCRR3))V$=P%7PN_)JjG%C_ALGAk{0sC|xhHATc>3Rj;Ht4VXgopt5?Q fey)DbL6HF=t}YT#F`v}3)Ep)Qpvj9uz{v>!e;rLD literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..daf7ffa1b3a573616c0c424df2bc199dab8d3c1b GIT binary patch literal 735 zcmWG3cFW93Wno}sN@V3oN=*5$%*4Q;s3^gJ6)?Ym3Tv@)l_lnsrV^usOF^UjNnj$ zdiXkoX3Sy+3;%<0q4Zy7CZ z!T|*V2F3;ku$YqrP>}+MVgnN^n@DP2a#3YLiFaxxqZpJOQdyAdm0y&umspUPoRO+m pQk(`%t9npby-+__Kj)yxfDl&~38mZGs#(8HRJF=R=?Car9X zx*{ov6or77dawrxqEx}6ARf|7QH1u=g3yDQgVze`K`GRkdEf8Nd-Gly$sYEb{mu9L zzW3g|o!|Use*M{{u4fx&exvhR*Q;zA<4(rjKYGeAj4{JBJ~I7-@H3k`*Xf@1zA!Dr z*fzI=`1pedf8ZHfct=>z%j#SGpm}p zUT0ysTwM27)>nJwO(P#nG<0%K2b6m2!zqr=rd$r&W6@HZG=C zVQLjpQ)fA>RXaRja`M=!Osz_4>P+)oOp%u;y;r)s3dc)M}(w zQ`CxDwTgCbb*5G)wYs7F7eCFD#pQmC&4}NMLa9b5)qs?Ga@e;Hj>o~KE#v7)j7n*LH9XK&@lWG;$+A9Pj)bd-z9^U zBkQ3IN~8?_+g;qD;{YcE8!B7kiQxDjgNlMp6)H~ozrRhtlto5l2sA5#QS6*yQZ-3J zHWc%iXhek=XkO45aSj!mB!tl=(TFNG(ELeb#5peNP!huEu4qJ$1VHOijS=U#C{ans zj4Xdx(KVuH4xr@;MvTAbZ|hCbh#qQy)@OndZ3fPvGM9vy(RZQ|-4KD+pBf|1aZv%2 zkQt@?C%b6r=&=l#I;t_^92dng31Rf2XhhF_z|@C=(VnjkjIM}A^k4~0-4cxG8gY(` z0-J;|`b{*VCs&|7p)ukd7qvGDnUQ@&G@=_L&|cOUagK|!oP;oXOEjV$0BC=!G2$E- z`!5M$^rL7*B?Oo@1tZ4a^LN@`iD-LM7XwVs2u8FSILAf#PeL}fwBL+GM${$&)9-7H zILF1qK@!5~vS>to7%+WXW5hY`!9l2zgfRMDG@>#Jbe<557=O>-PDM1LP7>(6A{fy% z;vDzTAhb=|-V0Sa+h(9Tv*Y@KAOJq3tNN%|b&Z9vZ@( zZm1uH`e5xwp$21VR_1&_#sqMWK5vlt0Zw`O^qpk3!d3 zs4&Sx1^;O)_!PFH&=x}XqtJa8DtbIr^bookg>JIYNHb;O?S)CNG3X5NIO5fDY6W6% z1BgebV@*F!ze=Yy-8?93M0rS?4%&M%P3gZu`&gzajWuYW%QU5b2JHu#rZmQ&-I8fa z#|zr7OjBA}(EgTbO2^7*rL0U-T2as*muX6m3EC9Vbj>3;M4Oia26#_ ztg8d(yu^vMYv5dxII%tqoKGcAtla|V8{iES|B7l*4(*_erl(@Yu!A>9a>!wCljL9q zuf?dk`tP^s@8%1o!?%LeLHOsGxO4f*!(VMZe`WROuQ$&8d-wavcR%=L_Q-|hchzj|@c)q{p9bfG&PIcBg3vYN+8|$z8uPCQ*cIu@Q evnP(d@bby|*=P16_MCUl>sn=hmdK!4}FS3!%+=~wKv$w8MtB|0D>+6=*w1qG>+)L z1yC$90mWs1IHEO^&vj|5XKltp*lcDi6cU>qdA;oc4XE@qvL0(LJbTPz+li;t^ZL&Z zq3?wQ%!IX}0p#*XNcwUeVHc89TYo-ar9S}RUzFz@rjm_?NLC2#OtRWYF#lTvfKAr? z-FK-pYcA3h!fPf?Z6s)}s>f`bGoJA-D+}-?B2iOU5^73mwvuK-(keP)jik$NQlg-B zNsk0=NO~gi8gVQ8t$@Q}L|GT42Ift;lGIT?s}P@7O(29T1i)YuVMqvx5qv;3*0ypb zI_d}0Npwl4s4Um+bV4u2!IR@ny#9bXQTWL2fg^XF+fJ) + 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/**