tp: Migrate SearchValidationResult outside of storage for cleanup

Change-Id: I23a7c8fc083e3f645e48f0a23426fb000cad32ca
diff --git a/src/trace_processor/db/query_executor.cc b/src/trace_processor/db/query_executor.cc
index 056a8db..d0ef7ed 100644
--- a/src/trace_processor/db/query_executor.cc
+++ b/src/trace_processor/db/query_executor.cc
@@ -66,12 +66,12 @@
   }
 
   switch (storage.ValidateSearchConstraints(c.value, c.op)) {
-    case storage::Storage::SearchValidationResult::kAllData:
+    case SearchValidationResult::kAllData:
       return;
-    case storage::Storage::SearchValidationResult::kNoData:
+    case SearchValidationResult::kNoData:
       rm->Clear();
       return;
-    case storage::Storage::SearchValidationResult::kOk:
+    case SearchValidationResult::kOk:
       break;
   }
 
@@ -291,12 +291,12 @@
                                                   const storage::Storage& col,
                                                   RowMap* rm) {
   switch (col.ValidateSearchConstraints(c.value, c.op)) {
-    case storage::Storage::SearchValidationResult::kAllData:
+    case SearchValidationResult::kAllData:
       return;
-    case storage::Storage::SearchValidationResult::kNoData:
+    case SearchValidationResult::kNoData:
       rm->Clear();
       return;
-    case storage::Storage::SearchValidationResult::kOk:
+    case SearchValidationResult::kOk:
       break;
   }
 
@@ -307,12 +307,12 @@
                                                   const storage::Storage& col,
                                                   RowMap* rm) {
   switch (col.ValidateSearchConstraints(c.value, c.op)) {
-    case storage::Storage::SearchValidationResult::kAllData:
+    case SearchValidationResult::kAllData:
       return;
-    case storage::Storage::SearchValidationResult::kNoData:
+    case SearchValidationResult::kNoData:
       rm->Clear();
       return;
-    case storage::Storage::SearchValidationResult::kOk:
+    case SearchValidationResult::kOk:
       break;
   }
 
diff --git a/src/trace_processor/db/storage/arrangement_storage.cc b/src/trace_processor/db/storage/arrangement_storage.cc
index fac7f68..703e4b7 100644
--- a/src/trace_processor/db/storage/arrangement_storage.cc
+++ b/src/trace_processor/db/storage/arrangement_storage.cc
@@ -40,7 +40,7 @@
                   inner_->size());
 }
 
-Storage::SearchValidationResult ArrangementStorage::ValidateSearchConstraints(
+SearchValidationResult ArrangementStorage::ValidateSearchConstraints(
     SqlValue sql_val,
     FilterOp op) const {
   return inner_->ValidateSearchConstraints(sql_val, op);
diff --git a/src/trace_processor/db/storage/arrangement_storage.h b/src/trace_processor/db/storage/arrangement_storage.h
index 97a944e..2f0ac10 100644
--- a/src/trace_processor/db/storage/arrangement_storage.h
+++ b/src/trace_processor/db/storage/arrangement_storage.h
@@ -32,8 +32,8 @@
   explicit ArrangementStorage(std::unique_ptr<Storage> inner,
                               const std::vector<uint32_t>* arrangement);
 
-  Storage::SearchValidationResult ValidateSearchConstraints(SqlValue, FilterOp)
-      const override;
+  SearchValidationResult ValidateSearchConstraints(SqlValue,
+                                                   FilterOp) const override;
 
   RangeOrBitVector Search(FilterOp op,
                           SqlValue value,
diff --git a/src/trace_processor/db/storage/dense_null_storage.cc b/src/trace_processor/db/storage/dense_null_storage.cc
index e1a6d69..cbe9743 100644
--- a/src/trace_processor/db/storage/dense_null_storage.cc
+++ b/src/trace_processor/db/storage/dense_null_storage.cc
@@ -32,11 +32,11 @@
                                    const BitVector* non_null)
     : inner_(std::move(inner)), non_null_(non_null) {}
 
-Storage::SearchValidationResult DenseNullStorage::ValidateSearchConstraints(
+SearchValidationResult DenseNullStorage::ValidateSearchConstraints(
     SqlValue sql_val,
     FilterOp op) const {
   if (op == FilterOp::kIsNull) {
-    return Storage::SearchValidationResult::kOk;
+    return SearchValidationResult::kOk;
   }
 
   return inner_->ValidateSearchConstraints(sql_val, op);
@@ -49,7 +49,7 @@
 
   if (op == FilterOp::kIsNull) {
     switch (inner_->ValidateSearchConstraints(sql_val, op)) {
-      case Storage::SearchValidationResult::kNoData: {
+      case SearchValidationResult::kNoData: {
         // There is no need to search in underlying storage. It's enough to
         // intersect the |non_null_|.
         BitVector res = non_null_->IntersectRange(in.start, in.end);
@@ -57,9 +57,9 @@
         res.Resize(in.end, false);
         return RangeOrBitVector(std::move(res));
       }
-      case Storage::SearchValidationResult::kAllData:
+      case SearchValidationResult::kAllData:
         return RangeOrBitVector(in);
-      case Storage::SearchValidationResult::kOk:
+      case SearchValidationResult::kOk:
         break;
     }
   }
diff --git a/src/trace_processor/db/storage/dummy_storage.cc b/src/trace_processor/db/storage/dummy_storage.cc
index b4f0be5..ed30e8d 100644
--- a/src/trace_processor/db/storage/dummy_storage.cc
+++ b/src/trace_processor/db/storage/dummy_storage.cc
@@ -21,9 +21,8 @@
 namespace trace_processor {
 namespace storage {
 
-DummyStorage::SearchValidationResult DummyStorage::ValidateSearchConstraints(
-    SqlValue,
-    FilterOp) const {
+SearchValidationResult DummyStorage::ValidateSearchConstraints(SqlValue,
+                                                               FilterOp) const {
   PERFETTO_FATAL("Shouldn't be called");
 }
 
diff --git a/src/trace_processor/db/storage/fake_storage.cc b/src/trace_processor/db/storage/fake_storage.cc
index fd9ac2c..9d2316a 100644
--- a/src/trace_processor/db/storage/fake_storage.cc
+++ b/src/trace_processor/db/storage/fake_storage.cc
@@ -27,9 +27,8 @@
 FakeStorage::FakeStorage(uint32_t size, SearchStrategy strategy)
     : size_(size), strategy_(strategy) {}
 
-FakeStorage::SearchValidationResult FakeStorage::ValidateSearchConstraints(
-    SqlValue,
-    FilterOp) const {
+SearchValidationResult FakeStorage::ValidateSearchConstraints(SqlValue,
+                                                              FilterOp) const {
   return SearchValidationResult::kOk;
 }
 
diff --git a/src/trace_processor/db/storage/id_storage.cc b/src/trace_processor/db/storage/id_storage.cc
index 36418f9..68cfb2f 100644
--- a/src/trace_processor/db/storage/id_storage.cc
+++ b/src/trace_processor/db/storage/id_storage.cc
@@ -74,9 +74,8 @@
 
 }  // namespace
 
-IdStorage::SearchValidationResult IdStorage::ValidateSearchConstraints(
-    SqlValue val,
-    FilterOp op) const {
+SearchValidationResult IdStorage::ValidateSearchConstraints(SqlValue val,
+                                                            FilterOp op) const {
   // NULL checks.
   if (PERFETTO_UNLIKELY(val.is_null())) {
     if (op == FilterOp::kIsNotNull) {
@@ -118,11 +117,11 @@
     case SqlValue::kString:
       // Any string is always more than any numeric.
       if (op == FilterOp::kLt || op == FilterOp::kLe) {
-        return Storage::SearchValidationResult::kAllData;
+        return SearchValidationResult::kAllData;
       }
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
     case SqlValue::kBytes:
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
   }
 
   // TODO(b/307482437): Remove after adding support for double
diff --git a/src/trace_processor/db/storage/id_storage_unittest.cc b/src/trace_processor/db/storage/id_storage_unittest.cc
index e792c01..91cc37b 100644
--- a/src/trace_processor/db/storage/id_storage_unittest.cc
+++ b/src/trace_processor/db/storage/id_storage_unittest.cc
@@ -38,55 +38,55 @@
 
   // NULL checks
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue(), FilterOp::kIsNull),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue(), FilterOp::kIsNotNull),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   // FilterOp checks
   ASSERT_EQ(
       storage.ValidateSearchConstraints(SqlValue::Long(15), FilterOp::kGlob),
-      Storage::SearchValidationResult::kNoData);
+      SearchValidationResult::kNoData);
   ASSERT_EQ(
       storage.ValidateSearchConstraints(SqlValue::Long(15), FilterOp::kRegex),
-      Storage::SearchValidationResult::kNoData);
+      SearchValidationResult::kNoData);
 
   // Type checks
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue::String("cheese"),
                                               FilterOp::kGe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 
   // Value bounds
   SqlValue max_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<uint32_t>::max()) + 10);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   SqlValue min_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<uint32_t>::min()) - 1);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 }
 
 TEST(IdStorageUnittest, SearchEqSimple) {
diff --git a/src/trace_processor/db/storage/null_storage.cc b/src/trace_processor/db/storage/null_storage.cc
index 44e2061..a1ca7d0 100644
--- a/src/trace_processor/db/storage/null_storage.cc
+++ b/src/trace_processor/db/storage/null_storage.cc
@@ -73,11 +73,11 @@
 
 }  // namespace
 
-Storage::SearchValidationResult NullStorage::ValidateSearchConstraints(
+SearchValidationResult NullStorage::ValidateSearchConstraints(
     SqlValue sql_val,
     FilterOp op) const {
   if (op == FilterOp::kIsNull) {
-    return Storage::SearchValidationResult::kOk;
+    return SearchValidationResult::kOk;
   }
 
   return storage_->ValidateSearchConstraints(sql_val, op);
@@ -96,7 +96,7 @@
 
   if (op == FilterOp::kIsNull) {
     switch (storage_->ValidateSearchConstraints(sql_val, op)) {
-      case Storage::SearchValidationResult::kNoData: {
+      case SearchValidationResult::kNoData: {
         // There is no need to search in underlying storage. It's enough to
         // intersect the |non_null_|.
         BitVector res = non_null_->IntersectRange(in.start, in.end);
@@ -104,9 +104,9 @@
         res.Resize(non_null_->size(), false);
         return RangeOrBitVector(std::move(res));
       }
-      case Storage::SearchValidationResult::kAllData:
+      case SearchValidationResult::kAllData:
         return RangeOrBitVector(in);
-      case Storage::SearchValidationResult::kOk:
+      case SearchValidationResult::kOk:
         break;
     }
   }
@@ -129,7 +129,7 @@
 
   if (op == FilterOp::kIsNull) {
     switch (storage_->ValidateSearchConstraints(sql_val, op)) {
-      case Storage::SearchValidationResult::kNoData: {
+      case SearchValidationResult::kNoData: {
         BitVector::Builder null_indices(indices_size);
         for (uint32_t* it = indices; it != indices + indices_size; it++) {
           null_indices.Append(!non_null_->IsSet(*it));
@@ -138,9 +138,9 @@
         // check if the index is set in |non_null_|.
         return RangeOrBitVector(std::move(null_indices).Build());
       }
-      case Storage::SearchValidationResult::kAllData:
+      case SearchValidationResult::kAllData:
         return RangeOrBitVector(Range(0, indices_size));
-      case Storage::SearchValidationResult::kOk:
+      case SearchValidationResult::kOk:
         break;
     }
   }
diff --git a/src/trace_processor/db/storage/numeric_storage.cc b/src/trace_processor/db/storage/numeric_storage.cc
index 1857eee..b090cb8 100644
--- a/src/trace_processor/db/storage/numeric_storage.cc
+++ b/src/trace_processor/db/storage/numeric_storage.cc
@@ -195,8 +195,9 @@
 
 }  // namespace
 
-NumericStorageBase::SearchValidationResult
-NumericStorageBase::ValidateSearchConstraints(SqlValue val, FilterOp op) const {
+SearchValidationResult NumericStorageBase::ValidateSearchConstraints(
+    SqlValue val,
+    FilterOp op) const {
   // NULL checks.
   if (PERFETTO_UNLIKELY(val.is_null())) {
     if (op == FilterOp::kIsNotNull) {
@@ -237,11 +238,11 @@
     case SqlValue::kString:
       // Any string is always more than any numeric.
       if (op == FilterOp::kLt || op == FilterOp::kLe) {
-        return Storage::SearchValidationResult::kAllData;
+        return SearchValidationResult::kAllData;
       }
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
     case SqlValue::kBytes:
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
   }
 
   // TODO(b/307482437): There is currently no support for comparison with double
@@ -289,7 +290,7 @@
 
   switch (extreme_validator) {
     case kOk:
-      return Storage::SearchValidationResult::kOk;
+      return SearchValidationResult::kOk;
     case kTooBig:
       if (op == FilterOp::kLt || op == FilterOp::kLe || op == FilterOp::kNe) {
         return SearchValidationResult::kAllData;
diff --git a/src/trace_processor/db/storage/numeric_storage_unittest.cc b/src/trace_processor/db/storage/numeric_storage_unittest.cc
index aa2d2d7..5ba32ad 100644
--- a/src/trace_processor/db/storage/numeric_storage_unittest.cc
+++ b/src/trace_processor/db/storage/numeric_storage_unittest.cc
@@ -42,22 +42,22 @@
 
   // NULL checks
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue(), FilterOp::kIsNull),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue(), FilterOp::kIsNotNull),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   // FilterOp checks
   ASSERT_EQ(
       storage.ValidateSearchConstraints(SqlValue::Long(15), FilterOp::kGlob),
-      Storage::SearchValidationResult::kNoData);
+      SearchValidationResult::kNoData);
   ASSERT_EQ(
       storage.ValidateSearchConstraints(SqlValue::Long(15), FilterOp::kRegex),
-      Storage::SearchValidationResult::kNoData);
+      SearchValidationResult::kNoData);
 
   // Type checks
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue::String("cheese"),
                                               FilterOp::kGe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 }
 
 TEST(NumericStorageUnittest, InvalidValueBoundsUint32) {
@@ -68,34 +68,34 @@
   SqlValue max_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<uint32_t>::max()) + 10);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   SqlValue min_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<uint32_t>::min()) - 1);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 }
 
 TEST(NumericStorageUnittest, InvalidValueBoundsInt32) {
@@ -106,34 +106,34 @@
   SqlValue max_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<int32_t>::max()) + 10);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   SqlValue min_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<int32_t>::min()) - 1);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 }
 
 TEST(NumericStorageUnittest, StableSortTrivial) {
diff --git a/src/trace_processor/db/storage/selector_storage.cc b/src/trace_processor/db/storage/selector_storage.cc
index 934b900..d4865e7 100644
--- a/src/trace_processor/db/storage/selector_storage.cc
+++ b/src/trace_processor/db/storage/selector_storage.cc
@@ -31,7 +31,7 @@
                                  const BitVector* selector)
     : inner_(std::move(inner)), selector_(selector) {}
 
-Storage::SearchValidationResult SelectorStorage::ValidateSearchConstraints(
+SearchValidationResult SelectorStorage::ValidateSearchConstraints(
     SqlValue sql_val,
     FilterOp op) const {
   return inner_->ValidateSearchConstraints(sql_val, op);
diff --git a/src/trace_processor/db/storage/selector_storage.h b/src/trace_processor/db/storage/selector_storage.h
index 9d368e2..518e22b 100644
--- a/src/trace_processor/db/storage/selector_storage.h
+++ b/src/trace_processor/db/storage/selector_storage.h
@@ -31,8 +31,8 @@
  public:
   SelectorStorage(std::unique_ptr<Storage> storage, const BitVector* non_null);
 
-  Storage::SearchValidationResult ValidateSearchConstraints(SqlValue, FilterOp)
-      const override;
+  SearchValidationResult ValidateSearchConstraints(SqlValue,
+                                                   FilterOp) const override;
 
   RangeOrBitVector Search(FilterOp op,
                           SqlValue value,
diff --git a/src/trace_processor/db/storage/set_id_storage.cc b/src/trace_processor/db/storage/set_id_storage.cc
index b703644..5efc45f 100644
--- a/src/trace_processor/db/storage/set_id_storage.cc
+++ b/src/trace_processor/db/storage/set_id_storage.cc
@@ -58,7 +58,7 @@
 
 }  // namespace
 
-SetIdStorage::SearchValidationResult SetIdStorage::ValidateSearchConstraints(
+SearchValidationResult SetIdStorage::ValidateSearchConstraints(
     SqlValue val,
     FilterOp op) const {
   // NULL checks.
@@ -101,11 +101,11 @@
     case SqlValue::kString:
       // Any string is always more than any numeric.
       if (op == FilterOp::kLt || op == FilterOp::kLe) {
-        return Storage::SearchValidationResult::kAllData;
+        return SearchValidationResult::kAllData;
       }
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
     case SqlValue::kBytes:
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
   }
 
   // TODO(b/307482437): Remove after adding support for double
diff --git a/src/trace_processor/db/storage/set_id_storage_unittest.cc b/src/trace_processor/db/storage/set_id_storage_unittest.cc
index b6f6cdb..562db61 100644
--- a/src/trace_processor/db/storage/set_id_storage_unittest.cc
+++ b/src/trace_processor/db/storage/set_id_storage_unittest.cc
@@ -34,55 +34,55 @@
   SetIdStorage storage(&storage_data);
   // NULL checks
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue(), FilterOp::kIsNull),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue(), FilterOp::kIsNotNull),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   // FilterOp checks
   ASSERT_EQ(
       storage.ValidateSearchConstraints(SqlValue::Long(15), FilterOp::kGlob),
-      Storage::SearchValidationResult::kNoData);
+      SearchValidationResult::kNoData);
   ASSERT_EQ(
       storage.ValidateSearchConstraints(SqlValue::Long(15), FilterOp::kRegex),
-      Storage::SearchValidationResult::kNoData);
+      SearchValidationResult::kNoData);
 
   // Type checks
   ASSERT_EQ(storage.ValidateSearchConstraints(SqlValue::String("cheese"),
                                               FilterOp::kGe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 
   // Value bounds
   SqlValue max_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<uint32_t>::max()) + 10);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(max_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   SqlValue min_val = SqlValue::Long(
       static_cast<int64_t>(std::numeric_limits<uint32_t>::min()) - 1);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kGt),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kNe),
-            Storage::SearchValidationResult::kAllData);
+            SearchValidationResult::kAllData);
 
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLe),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kLt),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
   ASSERT_EQ(storage.ValidateSearchConstraints(min_val, FilterOp::kEq),
-            Storage::SearchValidationResult::kNoData);
+            SearchValidationResult::kNoData);
 }
 
 TEST(SetIdStorageUnittest, SearchEqSimple) {
diff --git a/src/trace_processor/db/storage/storage.h b/src/trace_processor/db/storage/storage.h
index e2cf237..eb0c52a 100644
--- a/src/trace_processor/db/storage/storage.h
+++ b/src/trace_processor/db/storage/storage.h
@@ -33,8 +33,6 @@
  public:
   using StorageProto = protos::pbzero::SerializedColumn_Storage;
 
-  enum class SearchValidationResult { kOk = 0, kAllData = 1, kNoData = 2 };
-
   virtual ~Storage();
 
   // Verifies whether any further filtering is needed and if not, whether the
@@ -59,7 +57,7 @@
   // Notes for callers:
   //  * Should only be called if ValidateSearchContraints returned kOk.
   //  * Callers should note that the return value of this function corresponds
-  //    to positions in |indices| *not* positions in the storage.
+  //    to positions in the storage.
   //
   // Notes for implementors:
   //  * Implementations should ensure that the return value *only* includes
diff --git a/src/trace_processor/db/storage/string_storage.cc b/src/trace_processor/db/storage/string_storage.cc
index 229e470..7d2bc64 100644
--- a/src/trace_processor/db/storage/string_storage.cc
+++ b/src/trace_processor/db/storage/string_storage.cc
@@ -163,7 +163,7 @@
 
 }  // namespace
 
-StringStorage::SearchValidationResult StringStorage::ValidateSearchConstraints(
+SearchValidationResult StringStorage::ValidateSearchConstraints(
     SqlValue val,
     FilterOp op) const {
   // Type checks.
@@ -175,11 +175,11 @@
     case SqlValue::kDouble:
       // Any string is always more than any numeric.
       if (op == FilterOp::kGt || op == FilterOp::kGe) {
-        return Storage::SearchValidationResult::kAllData;
+        return SearchValidationResult::kAllData;
       }
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
     case SqlValue::kBytes:
-      return Storage::SearchValidationResult::kNoData;
+      return SearchValidationResult::kNoData;
   }
 
   return SearchValidationResult::kOk;
diff --git a/src/trace_processor/db/storage/types.h b/src/trace_processor/db/storage/types.h
index 6884988..83c5d01 100644
--- a/src/trace_processor/db/storage/types.h
+++ b/src/trace_processor/db/storage/types.h
@@ -23,6 +23,13 @@
 namespace perfetto {
 namespace trace_processor {
 
+// Result of calling Storage::ValidateSearchResult function.
+enum class SearchValidationResult {
+  kOk = 0,       // It makes sense to run search
+  kAllData = 1,  // Don't run search, all data passes the constraint.
+  kNoData = 2    // Don't run search, no data passes the constraint.
+};
+
 // Used for result of filtering, which is sometimes (for more optimised
 // operations) a Range and BitVector otherwise. Stores a variant of Range and
 // BitVector.
diff --git a/src/trace_processor/db/storage/utils.h b/src/trace_processor/db/storage/utils.h
index 55e18f8..3d38545 100644
--- a/src/trace_processor/db/storage/utils.h
+++ b/src/trace_processor/db/storage/utils.h
@@ -16,7 +16,10 @@
 #ifndef SRC_TRACE_PROCESSOR_DB_STORAGE_UTILS_H_
 #define SRC_TRACE_PROCESSOR_DB_STORAGE_UTILS_H_
 
+#include "perfetto/base/logging.h"
+#include "perfetto/trace_processor/basic_types.h"
 #include "src/trace_processor/containers/bit_vector.h"
+#include "src/trace_processor/db/storage/types.h"
 
 namespace perfetto {
 namespace trace_processor {
@@ -83,6 +86,12 @@
   }
 }
 
+// Used for comparing the integer column ({u|}int{32|64}) with a double value.
+// If further search is required it would return kOk and change the SqlValue to
+// a `SqlLong` which would return real results.
+SearchValidationResult CompareIntColumnWithDouble(SqlValue* sql_val,
+                                                  FilterOp op);
+
 }  // namespace utils
 
 }  // namespace storage