Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8c40b10

Browse files
Add binary evaluation comparison on boolean fields (#237)
Previously, our sort was failing on booleans because it did not know how to compare them.
1 parent 37f5aa5 commit 8c40b10

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

‎src/cpp/enclave/flatbuffer_helpers/expression_evaluation.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ eval_binary_comparison(flatbuffers::FlatBufferBuilder &builder, const tuix::Fiel
108108
bool result = false;
109109
if (!result_is_null) {
110110
switch (left->value_type()) {
111+
case tuix::FieldUnion_BooleanField: {
112+
result =
113+
Operation<bool>()(static_cast<const tuix::BooleanField *>(left->value())->value(),
114+
static_cast<const tuix::BooleanField *>(right->value())->value());
115+
break;
116+
}
111117
case tuix::FieldUnion_IntegerField: {
112118
result =
113119
Operation<int32_t>()(static_cast<const tuix::IntegerField *>(left->value())->value(),

‎src/test/scala/edu/berkeley/cs/rise/opaque/SortSuite.scala

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,27 @@ trait SortSuite extends OpaqueSuiteBase with SQLHelper {
9393
}
9494
}
9595

96+
test("sorting after union before aggregate") {
97+
checkAnswer() { sl =>
98+
val one = sl.applyTo(
99+
Seq[(Integer, Boolean, Boolean)]((1, true, false), (2, false, true), (10, true, false))
100+
.toDF("id", "value", "value2")
101+
)
102+
one.createOrReplaceTempView("one")
103+
104+
val two = sl.applyTo(
105+
Seq[(Integer, Boolean, Boolean)]((20, true, true), (30, false, false), (50, false, true))
106+
.toDF("id", "value", "value2")
107+
)
108+
two.createOrReplaceTempView("two")
109+
110+
spark.sql("""
111+
|SELECT value AND value2 FROM one
112+
|UNION
113+
|SELECT value AND value2 FROM two""".stripMargin)
114+
}
115+
}
116+
96117
def generateRandomPairs(numPairs: Int = 1000) = {
97118
val rand = new scala.util.Random()
98119
Seq.fill(numPairs) { (rand.nextInt(), rand.nextInt()) }.toDF

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /