diff --git a/python/pytests/else_test.py b/python/pytests/else_test.py index f30cf6304..4d0032b97 100644 --- a/python/pytests/else_test.py +++ b/python/pytests/else_test.py @@ -65,3 +65,36 @@ async def test_else_debug(record_source, golden) -> None: } ) ) + + +@pytest.fixture(scope="module") +def record_source_slack() -> kd.sources.JsonlString: + content = "\n".join( + [ + """{"text":"Thread 1","user":"UCZ4","time":1,"thread_ts":1,"key":"dev"}""", + """{"text":"Thread 2","user":"U016","time":2,"thread_ts":1,"key":"dev"}""", + """{"text":"Msg 1","user":"U016","time":3,"thread_ts":null,"key":"dev"}""", + """{"text":"Msg 2","user":"U016","time":4,"thread_ts":null,"key":"dev"}""", + ] + ) + return kd.sources.JsonlString( + content, time_column_name="time", key_column_name="key" + ) + + +def test_else_unordered_record(record_source_slack, golden) -> None: + threads = record_source_slack.filter(record_source_slack.col("thread_ts").is_not_null()) + non_threads = record_source_slack.filter(record_source_slack.col("thread_ts").is_null()) + + # this call re-orders the columns in the non_threads timestream + # and causes the bug to occur + non_threads = non_threads.extend({"user": non_threads.col("user")}) + + joined = kd.record({"threads": threads, "non_threads": non_threads}) + + threads = joined.col("threads") + non_threads = joined.col("non_threads") + + golden.jsonl( + joined.extend({"joined": threads.else_(non_threads)}) + ) diff --git a/python/pytests/golden/else_test/test_else_unordered_record.jsonl b/python/pytests/golden/else_test/test_else_unordered_record.jsonl new file mode 100644 index 000000000..aff2882ef --- /dev/null +++ b/python/pytests/golden/else_test/test_else_unordered_record.jsonl @@ -0,0 +1,4 @@ +{"_time":"1970-01-01T00:00:00.000000001","_subsort":0,"_key_hash":17095134351192101601,"_key":"dev","joined":{"text":"Thread 1","user":"UCZ4","time":1,"thread_ts":1.0,"key":"dev"},"threads":{"text":"Thread 1","user":"UCZ4","time":1.0,"thread_ts":1.0,"key":"dev"},"non_threads":null} +{"_time":"1970-01-01T00:00:00.000000002","_subsort":1,"_key_hash":17095134351192101601,"_key":"dev","joined":{"text":"Thread 2","user":"U016","time":2,"thread_ts":1.0,"key":"dev"},"threads":{"text":"Thread 2","user":"U016","time":2.0,"thread_ts":1.0,"key":"dev"},"non_threads":null} +{"_time":"1970-01-01T00:00:00.000000003","_subsort":2,"_key_hash":17095134351192101601,"_key":"dev","joined":{"text":"Msg 1","user":"U016","time":3,"thread_ts":null,"key":"dev"},"threads":null,"non_threads":{"text":"Msg 1","user":"U016","time":3.0,"thread_ts":null,"key":"dev"}} +{"_time":"1970-01-01T00:00:00.000000004","_subsort":3,"_key_hash":17095134351192101601,"_key":"dev","joined":{"text":"Msg 2","user":"U016","time":4,"thread_ts":null,"key":"dev"},"threads":null,"non_threads":{"text":"Msg 2","user":"U016","time":4.0,"thread_ts":null,"key":"dev"}}