浏览代码

LibSQL: Short-circuit single-element tuple comparisons

If a tuple has a single value, perform a comparison using that singular
value. This allows, for example, comparisons of the form "(1) < 4",
where (1) is a single element tuple.
Timothy Flynn 3 年之前
父节点
当前提交
b15db851fe
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      Userland/Libraries/LibSQL/Value.cpp

+ 4 - 1
Userland/Libraries/LibSQL/Value.cpp

@@ -983,8 +983,11 @@ bool TupleImpl::can_cast(Value const& other_value) const
 
 int TupleImpl::compare(Value const& other) const
 {
-    if (other.type() != SQLType::Tuple)
+    if (other.type() != SQLType::Tuple) {
+        if (size() == 1)
+            return Value(value().at(0)).compare(other);
         return 1;
+    }
 
     auto& other_impl = other.get_impl<TupleImpl>({});
     if (m_descriptor && other_impl.m_descriptor && m_descriptor->compare_ignoring_names(*other_impl.m_descriptor))