@@ -7020,13 +7020,19 @@ class Issue588 : public TestSuite {
7020
7020
insertCsvValues("test_588_3", "1,1\n2,2\n3,3");
7021
7021
createTable("test_588_4", {{"id", ctx().int64()}, {"D", ctx().int64()}});
7022
7022
insertCsvValues("test_588_4", "1,2\n2,3\n3,3");
7023
+ createTable("test_588_5",
7024
+ {{"id", ctx().int32()},
7025
+ {"s1", ctx().extDict(ctx().text(), 0)},
7026
+ {"s2", ctx().extDict(ctx().text(), 0)}});
7027
+ insertCsvValues("test_588_5", "1,str1,str22\n2,str2,str22\n3,str3,str33");
7023
7028
}
7024
7029
7025
7030
static void TearDownTestSuite() {
7026
7031
dropTable("test_588_1");
7027
7032
dropTable("test_588_2");
7028
7033
dropTable("test_588_3");
7029
7034
dropTable("test_588_4");
7035
+ dropTable("test_588_5");
7030
7036
}
7031
7037
};
7032
7038
@@ -7049,6 +7055,89 @@ TEST_F(Issue588, Reproducer1) {
7049
7055
auto res3 = runQuery(std::move(dag3));
7050
7056
}
7051
7057
7058
+ TEST_F(Issue588, Reproducer2) {
7059
+ QueryBuilder builder(ctx(), getSchemaProvider(), configPtr());
7060
+ auto scan1 = builder.scan("test_588_1");
7061
+ auto dag1 = scan1.proj({scan1.ref("A"), builder.cst("str")}).finalize();
7062
+ auto res1 = runQuery(std::move(dag1));
7063
+
7064
+ auto scan2 = builder.scan(res1.tableName());
7065
+ auto dag2 = scan2.proj({0, 1}).finalize();
7066
+ auto res2 = runQuery(std::move(dag2));
7067
+ }
7068
+
7069
+ TEST_F(Issue588, Reproducer3) {
7070
+ QueryBuilder builder(ctx(), getSchemaProvider(), configPtr());
7071
+ auto scan1 = builder.scan("test_588_5");
7072
+ auto dict1_type = scan1.ref("s1").type();
7073
+ auto dag1 = scan1
7074
+ .proj({scan1.ref("id"),
7075
+ builder.ifThenElse(scan1.ref("id").gt(2),
7076
+ scan1.ref("s1"),
7077
+ builder.cst("str").cast(dict1_type))})
7078
+ .finalize();
7079
+ auto res1 = runQuery(std::move(dag1));
7080
+
7081
+ auto scan2 = builder.scan(res1.tableName());
7082
+ auto dag2 = scan2.proj({0, 1}).finalize();
7083
+ auto res2 = runQuery(std::move(dag2));
7084
+ }
7085
+
7086
+ TEST_F(Issue588, Reproducer4) {
7087
+ QueryBuilder builder(ctx(), getSchemaProvider(), configPtr());
7088
+ auto scan1 = builder.scan("test_588_5");
7089
+ auto dict1_type = scan1.ref("s1").type();
7090
+ auto dag1 = scan1
7091
+ .proj({scan1.ref("id"),
7092
+ builder.ifThenElse(scan1.ref("id").gt(2),
7093
+ scan1.ref("s1"),
7094
+ scan1.ref("s2").cast(dict1_type))})
7095
+ .finalize();
7096
+ auto res1 = runQuery(std::move(dag1));
7097
+
7098
+ auto scan2 = builder.scan(res1.tableName());
7099
+ auto dag2 = scan2.proj({0, 1}).finalize();
7100
+ auto res2 = runQuery(std::move(dag2));
7101
+ }
7102
+
7103
+ TEST_F(Issue588, Reproducer5) {
7104
+ QueryBuilder builder(ctx(), getSchemaProvider(), configPtr());
7105
+ auto scan1 = builder.scan("test_588_5");
7106
+ auto dict1_type = scan1.ref("s1").type();
7107
+ auto dag1 = scan1
7108
+ .proj({scan1.ref("id"),
7109
+ builder.ifThenElse(
7110
+ scan1.ref("id").gt(2),
7111
+ scan1.ref("s1"),
7112
+ builder.ifThenElse(scan1.ref("id").gt(1),
7113
+ scan1.ref("s2").cast(dict1_type),
7114
+ builder.cst("str").cast(dict1_type)))})
7115
+ .finalize();
7116
+ auto res1 = runQuery(std::move(dag1));
7117
+
7118
+ auto scan2 = builder.scan(res1.tableName());
7119
+ auto dag2 = scan2.proj({0, 1}).finalize();
7120
+ auto res2 = runQuery(std::move(dag2));
7121
+ }
7122
+
7123
+ class Issue667 : public TestSuite {
7124
+ protected:
7125
+ static void SetUpTestSuite() {
7126
+ createTable("test_667", {{"str", ctx().extDict(ctx().text(), 0)}});
7127
+ insertCsvValues("test_667", "1\n2\n3");
7128
+ }
7129
+
7130
+ static void TearDownTestSuite() {}
7131
+ };
7132
+
7133
+ TEST_F(Issue667, DropInputThenConvertResult) {
7134
+ QueryBuilder builder(ctx(), getSchemaProvider(), configPtr());
7135
+ auto dag = builder.scan("test_667").proj("str").finalize();
7136
+ auto res = runQuery(std::move(dag));
7137
+ dropTable("test_667");
7138
+ compare_res_data(res, std::vector<std::string>({"1"s, "2"s, "3"s}));
7139
+ }
7140
+
7052
7141
TEST_F(QueryBuilderTest, RunOnResult) {
7053
7142
QueryBuilder builder(ctx(), schema_mgr_, configPtr());
7054
7143
0 commit comments