diff --git a/Android.bp b/Android.bp
index b1fdcd5..15d8883 100644
--- a/Android.bp
+++ b/Android.bp
@@ -6573,6 +6573,7 @@
     "src/trace_processor/dynamic/experimental_counter_dur_generator.cc",
     "src/trace_processor/dynamic/experimental_flamegraph_generator.cc",
     "src/trace_processor/dynamic/experimental_slice_layout_generator.cc",
+    "src/trace_processor/iterator_impl.cc",
     "src/trace_processor/read_trace.cc",
     "src/trace_processor/trace_processor.cc",
     "src/trace_processor/trace_processor_impl.cc",
diff --git a/BUILD b/BUILD
index f426d10..d13caca 100644
--- a/BUILD
+++ b/BUILD
@@ -452,6 +452,7 @@
 filegroup(
     name = "include_perfetto_trace_processor_trace_processor",
     srcs = [
+        "include/perfetto/trace_processor/iterator.h",
         "include/perfetto/trace_processor/read_trace.h",
         "include/perfetto/trace_processor/trace_processor.h",
     ],
@@ -936,6 +937,8 @@
         "src/trace_processor/dynamic/experimental_flamegraph_generator.h",
         "src/trace_processor/dynamic/experimental_slice_layout_generator.cc",
         "src/trace_processor/dynamic/experimental_slice_layout_generator.h",
+        "src/trace_processor/iterator_impl.cc",
+        "src/trace_processor/iterator_impl.h",
         "src/trace_processor/read_trace.cc",
         "src/trace_processor/trace_processor.cc",
         "src/trace_processor/trace_processor_impl.cc",
diff --git a/include/perfetto/trace_processor/BUILD.gn b/include/perfetto/trace_processor/BUILD.gn
index 8db2a2f..bdaf789 100644
--- a/include/perfetto/trace_processor/BUILD.gn
+++ b/include/perfetto/trace_processor/BUILD.gn
@@ -14,6 +14,7 @@
 
 source_set("trace_processor") {
   sources = [
+    "iterator.h",
     "read_trace.h",
     "trace_processor.h",
   ]
diff --git a/include/perfetto/trace_processor/iterator.h b/include/perfetto/trace_processor/iterator.h
new file mode 100644
index 0000000..9578f8f
--- /dev/null
+++ b/include/perfetto/trace_processor/iterator.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef INCLUDE_PERFETTO_TRACE_PROCESSOR_ITERATOR_H_
+#define INCLUDE_PERFETTO_TRACE_PROCESSOR_ITERATOR_H_
+
+#include <stdint.h>
+
+#include <memory>
+
+#include "perfetto/base/export.h"
+#include "perfetto/trace_processor/basic_types.h"
+#include "perfetto/trace_processor/status.h"
+
+namespace perfetto {
+namespace trace_processor {
+
+class IteratorImpl;
+
+// Iterator returning SQL rows satisfied by a query.
+class PERFETTO_EXPORT Iterator {
+ public:
+  explicit Iterator(std::unique_ptr<IteratorImpl>);
+  ~Iterator();
+
+  Iterator(Iterator&) noexcept = delete;
+  Iterator& operator=(Iterator&) = delete;
+
+  Iterator(Iterator&&) noexcept;
+  Iterator& operator=(Iterator&&);
+
+  // Forwards the iterator to the next result row and returns a boolean of
+  // whether there is a next row. If this method returns false,
+  // |Status()| should be called to check if there was an error. If
+  // there was no error, this means the EOF was reached.
+  bool Next();
+
+  // Returns the value associated with the column |col|. Any call to
+  // |Get()| must be preceded by a call to |Next()| returning
+  // kHasNext. |col| must be less than the number returned by |ColumnCount()|.
+  SqlValue Get(uint32_t col);
+
+  // Returns the name of the column at index |col|. Can be called even before
+  // calling |Next()|.
+  std::string GetColumnName(uint32_t col);
+
+  // Returns the number of columns in this iterator's query. Can be called
+  // even before calling |Next()|.
+  uint32_t ColumnCount();
+
+  // Returns the status of the iterator.
+  util::Status Status();
+
+ private:
+  // A PIMPL pattern is used to avoid leaking the dependencies on sqlite3.h and
+  // other internal classes.
+  std::unique_ptr<IteratorImpl> iterator_;
+};
+
+}  // namespace trace_processor
+}  // namespace perfetto
+
+#endif  // INCLUDE_PERFETTO_TRACE_PROCESSOR_ITERATOR_H_
diff --git a/include/perfetto/trace_processor/trace_processor.h b/include/perfetto/trace_processor/trace_processor.h
index 920c3fa..0cc7dbf 100644
--- a/include/perfetto/trace_processor/trace_processor.h
+++ b/include/perfetto/trace_processor/trace_processor.h
@@ -23,6 +23,7 @@
 #include "perfetto/base/build_config.h"
 #include "perfetto/base/export.h"
 #include "perfetto/trace_processor/basic_types.h"
+#include "perfetto/trace_processor/iterator.h"
 #include "perfetto/trace_processor/status.h"
 #include "perfetto/trace_processor/trace_processor_storage.h"
 
@@ -33,45 +34,9 @@
 // traces. See TraceProcessorStorage for parsing of trace files.
 class PERFETTO_EXPORT TraceProcessor : public TraceProcessorStorage {
  public:
-  class IteratorImpl;
-
-  // Iterator returning SQL rows satisfied by a query.
-  class Iterator {
-   public:
-    Iterator(std::unique_ptr<IteratorImpl> iterator);
-    ~Iterator();
-
-    Iterator(Iterator&) noexcept = delete;
-    Iterator& operator=(Iterator&) = delete;
-
-    Iterator(Iterator&&) noexcept;
-    Iterator& operator=(Iterator&&);
-
-    // Forwards the iterator to the next result row and returns a boolean of
-    // whether there is a next row. If this method returns false,
-    // |Status()| should be called to check if there was an error. If
-    // there was no error, this means the EOF was reached.
-    bool Next();
-
-    // Returns the value associated with the column |col|. Any call to
-    // |Get()| must be preceded by a call to |Next()| returning
-    // kHasNext. |col| must be less than the number returned by |ColumnCount()|.
-    SqlValue Get(uint32_t col);
-
-    // Returns the name of the column at index |col|. Can be called even before
-    // calling |Next()|.
-    std::string GetColumnName(uint32_t col);
-
-    // Returns the number of columns in this iterator's query. Can be called
-    // even before calling |Next()|.
-    uint32_t ColumnCount();
-
-    // Returns the status of the iterator.
-    util::Status Status();
-
-   private:
-    std::unique_ptr<IteratorImpl> iterator_;
-  };
+  // For legacy API clients. Iterator used to be a nested class here. Many API
+  // clients depends on it at this point.
+  using Iterator = ::perfetto::trace_processor::Iterator;
 
   // Creates a new instance of TraceProcessor.
   static std::unique_ptr<TraceProcessor> CreateInstance(const Config&);
diff --git a/src/profiling/symbolizer/symbolize_database.cc b/src/profiling/symbolizer/symbolize_database.cc
index 462e836..a608bc0 100644
--- a/src/profiling/symbolizer/symbolize_database.cc
+++ b/src/profiling/symbolizer/symbolize_database.cc
@@ -34,7 +34,7 @@
 namespace profiling {
 
 namespace {
-using Iterator = trace_processor::TraceProcessor::Iterator;
+using trace_processor::Iterator;
 
 constexpr const char* kQueryUnsymbolized =
     "select spm.name, spm.build_id, spf.rel_pc "
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index 2b26b7e..0e2f47a 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -206,10 +206,10 @@
     "importers/proto/android_probes_parser.h",
     "importers/proto/android_probes_tracker.cc",
     "importers/proto/android_probes_tracker.h",
-    "importers/proto/graphics_event_module.cc",
-    "importers/proto/graphics_event_module.h",
     "importers/proto/gpu_event_parser.cc",
     "importers/proto/gpu_event_parser.h",
+    "importers/proto/graphics_event_module.cc",
+    "importers/proto/graphics_event_module.h",
     "importers/proto/graphics_frame_event_parser.cc",
     "importers/proto/graphics_frame_event_parser.h",
     "importers/proto/heap_graph_module.cc",
@@ -286,6 +286,8 @@
       "dynamic/experimental_flamegraph_generator.h",
       "dynamic/experimental_slice_layout_generator.cc",
       "dynamic/experimental_slice_layout_generator.h",
+      "iterator_impl.cc",
+      "iterator_impl.h",
       "read_trace.cc",
       "trace_processor.cc",
       "trace_processor_impl.cc",
diff --git a/src/trace_processor/iterator_impl.cc b/src/trace_processor/iterator_impl.cc
new file mode 100644
index 0000000..bf6e507
--- /dev/null
+++ b/src/trace_processor/iterator_impl.cc
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "src/trace_processor/iterator_impl.h"
+
+#include "perfetto/base/time.h"
+#include "perfetto/trace_processor/trace_processor_storage.h"
+#include "src/trace_processor/storage/trace_storage.h"
+#include "src/trace_processor/trace_processor_impl.h"
+
+namespace perfetto {
+namespace trace_processor {
+
+IteratorImpl::IteratorImpl(TraceProcessorImpl* trace_processor,
+                           sqlite3* db,
+                           ScopedStmt stmt,
+                           uint32_t column_count,
+                           util::Status status,
+                           uint32_t sql_stats_row)
+    : trace_processor_(trace_processor),
+      db_(db),
+      stmt_(std::move(stmt)),
+      column_count_(column_count),
+      status_(status),
+      sql_stats_row_(sql_stats_row) {}
+
+IteratorImpl::~IteratorImpl() {
+  if (trace_processor_) {
+    auto* its = &trace_processor_->iterators_;
+    auto it = std::find(its->begin(), its->end(), this);
+    PERFETTO_CHECK(it != its->end());
+    its->erase(it);
+
+    base::TimeNanos t_end = base::GetWallTimeNs();
+    auto* sql_stats = trace_processor_->context_.storage->mutable_sql_stats();
+    sql_stats->RecordQueryEnd(sql_stats_row_, t_end.count());
+  }
+}
+
+void IteratorImpl::Reset() {
+  *this = IteratorImpl(nullptr, nullptr, ScopedStmt(), 0,
+                       util::ErrStatus("Trace processor was deleted"), 0);
+}
+
+void IteratorImpl::RecordFirstNextInSqlStats() {
+  base::TimeNanos t_first_next = base::GetWallTimeNs();
+  auto* sql_stats = trace_processor_->context_.storage->mutable_sql_stats();
+  sql_stats->RecordQueryFirstNext(sql_stats_row_, t_first_next.count());
+}
+
+Iterator::Iterator(std::unique_ptr<IteratorImpl> iterator)
+    : iterator_(std::move(iterator)) {}
+Iterator::~Iterator() = default;
+
+Iterator::Iterator(Iterator&&) noexcept = default;
+Iterator& Iterator::operator=(Iterator&&) = default;
+
+bool Iterator::Next() {
+  return iterator_->Next();
+}
+
+SqlValue Iterator::Get(uint32_t col) {
+  return iterator_->Get(col);
+}
+
+std::string Iterator::GetColumnName(uint32_t col) {
+  return iterator_->GetColumnName(col);
+}
+
+uint32_t Iterator::ColumnCount() {
+  return iterator_->ColumnCount();
+}
+
+util::Status Iterator::Status() {
+  return iterator_->Status();
+}
+
+}  // namespace trace_processor
+}  // namespace perfetto
diff --git a/src/trace_processor/iterator_impl.h b/src/trace_processor/iterator_impl.h
new file mode 100644
index 0000000..3613f29
--- /dev/null
+++ b/src/trace_processor/iterator_impl.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SRC_TRACE_PROCESSOR_ITERATOR_IMPL_H_
+#define SRC_TRACE_PROCESSOR_ITERATOR_IMPL_H_
+
+#include <sqlite3.h>
+
+#include <memory>
+#include <vector>
+
+#include "perfetto/base/build_config.h"
+#include "perfetto/base/export.h"
+#include "perfetto/trace_processor/basic_types.h"
+#include "perfetto/trace_processor/iterator.h"
+#include "perfetto/trace_processor/status.h"
+#include "src/trace_processor/sqlite/scoped_db.h"
+
+namespace perfetto {
+namespace trace_processor {
+
+class TraceProcessorImpl;
+
+class IteratorImpl {
+ public:
+  IteratorImpl(TraceProcessorImpl* impl,
+               sqlite3* db,
+               ScopedStmt,
+               uint32_t column_count,
+               util::Status,
+               uint32_t sql_stats_row);
+  ~IteratorImpl();
+
+  IteratorImpl(IteratorImpl&) noexcept = delete;
+  IteratorImpl& operator=(IteratorImpl&) = delete;
+
+  IteratorImpl(IteratorImpl&&) noexcept = default;
+  IteratorImpl& operator=(IteratorImpl&&) = default;
+
+  // Methods called by the base Iterator class.
+  bool Next() {
+    // Delegate to the cc file to prevent trace_storage.h include in this file.
+    if (!called_next_) {
+      RecordFirstNextInSqlStats();
+      called_next_ = true;
+    }
+
+    if (!status_.ok())
+      return false;
+
+    int ret = sqlite3_step(*stmt_);
+    if (PERFETTO_UNLIKELY(ret != SQLITE_ROW && ret != SQLITE_DONE)) {
+      status_ = util::ErrStatus("%s", sqlite3_errmsg(db_));
+      return false;
+    }
+    return ret == SQLITE_ROW;
+  }
+
+  SqlValue Get(uint32_t col) {
+    auto column = static_cast<int>(col);
+    auto col_type = sqlite3_column_type(*stmt_, column);
+    SqlValue value;
+    switch (col_type) {
+      case SQLITE_INTEGER:
+        value.type = SqlValue::kLong;
+        value.long_value = sqlite3_column_int64(*stmt_, column);
+        break;
+      case SQLITE_TEXT:
+        value.type = SqlValue::kString;
+        value.string_value =
+            reinterpret_cast<const char*>(sqlite3_column_text(*stmt_, column));
+        break;
+      case SQLITE_FLOAT:
+        value.type = SqlValue::kDouble;
+        value.double_value = sqlite3_column_double(*stmt_, column);
+        break;
+      case SQLITE_BLOB:
+        value.type = SqlValue::kBytes;
+        value.bytes_value = sqlite3_column_blob(*stmt_, column);
+        value.bytes_count =
+            static_cast<size_t>(sqlite3_column_bytes(*stmt_, column));
+        break;
+      case SQLITE_NULL:
+        value.type = SqlValue::kNull;
+        break;
+    }
+    return value;
+  }
+
+  std::string GetColumnName(uint32_t col) {
+    return sqlite3_column_name(stmt_.get(), static_cast<int>(col));
+  }
+
+  uint32_t ColumnCount() { return column_count_; }
+
+  util::Status Status() { return status_; }
+
+  // Methods called by TraceProcessorImpl.
+  void Reset();
+
+ private:
+  void RecordFirstNextInSqlStats();
+
+  TraceProcessorImpl* trace_processor_;
+  sqlite3* db_ = nullptr;
+  ScopedStmt stmt_;
+  uint32_t column_count_ = 0;
+  util::Status status_;
+
+  uint32_t sql_stats_row_ = 0;
+  bool called_next_ = false;
+};
+
+}  // namespace trace_processor
+}  // namespace perfetto
+
+#endif  // SRC_TRACE_PROCESSOR_ITERATOR_IMPL_H_
diff --git a/src/trace_processor/trace_database_integrationtest.cc b/src/trace_processor/trace_database_integrationtest.cc
index 0255ed5..fb80e77 100644
--- a/src/trace_processor/trace_database_integrationtest.cc
+++ b/src/trace_processor/trace_database_integrationtest.cc
@@ -55,7 +55,7 @@
     return util::OkStatus();
   }
 
-  TraceProcessor::Iterator Query(const std::string& query) {
+  Iterator Query(const std::string& query) {
     return processor_->ExecuteQuery(query.c_str());
   }
 
diff --git a/src/trace_processor/trace_processor.cc b/src/trace_processor/trace_processor.cc
index 9be89e5..72b0b1d 100644
--- a/src/trace_processor/trace_processor.cc
+++ b/src/trace_processor/trace_processor.cc
@@ -30,35 +30,6 @@
 
 TraceProcessor::~TraceProcessor() = default;
 
-TraceProcessor::Iterator::Iterator(std::unique_ptr<IteratorImpl> iterator)
-    : iterator_(std::move(iterator)) {}
-TraceProcessor::Iterator::~Iterator() = default;
-
-TraceProcessor::Iterator::Iterator(TraceProcessor::Iterator&&) noexcept =
-    default;
-TraceProcessor::Iterator& TraceProcessor::Iterator::operator=(
-    TraceProcessor::Iterator&&) = default;
-
-bool TraceProcessor::Iterator::Next() {
-  return iterator_->Next();
-}
-
-SqlValue TraceProcessor::Iterator::Get(uint32_t col) {
-  return iterator_->Get(col);
-}
-
-std::string TraceProcessor::Iterator::GetColumnName(uint32_t col) {
-  return iterator_->GetColumnName(col);
-}
-
-uint32_t TraceProcessor::Iterator::ColumnCount() {
-  return iterator_->ColumnCount();
-}
-
-util::Status TraceProcessor::Iterator::Status() {
-  return iterator_->Status();
-}
-
 // static
 void EnableSQLiteVtableDebugging() {
   // This level of indirection is required to avoid clients to depend on table.h
diff --git a/src/trace_processor/trace_processor_impl.cc b/src/trace_processor/trace_processor_impl.cc
index ae171f4..0efb1a0 100644
--- a/src/trace_processor/trace_processor_impl.cc
+++ b/src/trace_processor/trace_processor_impl.cc
@@ -37,6 +37,7 @@
 #include "src/trace_processor/importers/json/json_trace_tokenizer.h"
 #include "src/trace_processor/importers/proto/metadata_tracker.h"
 #include "src/trace_processor/importers/systrace/systrace_trace_parser.h"
+#include "src/trace_processor/iterator_impl.h"
 #include "src/trace_processor/sqlite/span_join_operator_table.h"
 #include "src/trace_processor/sqlite/sql_stats_table.h"
 #include "src/trace_processor/sqlite/sqlite3_str_split.h"
@@ -705,9 +706,8 @@
   return deletion_list.size();
 }
 
-TraceProcessor::Iterator TraceProcessorImpl::ExecuteQuery(
-    const std::string& sql,
-    int64_t time_queued) {
+Iterator TraceProcessorImpl::ExecuteQuery(const std::string& sql,
+                                          int64_t time_queued) {
   sqlite3_stmt* raw_stmt;
   int err;
   {
@@ -732,7 +732,7 @@
   std::unique_ptr<IteratorImpl> impl(new IteratorImpl(
       this, *db_, ScopedStmt(raw_stmt), col_count, status, sql_stats_row));
   iterators_.emplace_back(impl.get());
-  return TraceProcessor::Iterator(std::move(impl));
+  return Iterator(std::move(impl));
 }
 
 void TraceProcessorImpl::InterruptQuery() {
@@ -854,42 +854,5 @@
   return util::OkStatus();
 }
 
-TraceProcessor::IteratorImpl::IteratorImpl(TraceProcessorImpl* trace_processor,
-                                           sqlite3* db,
-                                           ScopedStmt stmt,
-                                           uint32_t column_count,
-                                           util::Status status,
-                                           uint32_t sql_stats_row)
-    : trace_processor_(trace_processor),
-      db_(db),
-      stmt_(std::move(stmt)),
-      column_count_(column_count),
-      status_(status),
-      sql_stats_row_(sql_stats_row) {}
-
-TraceProcessor::IteratorImpl::~IteratorImpl() {
-  if (trace_processor_) {
-    auto* its = &trace_processor_->iterators_;
-    auto it = std::find(its->begin(), its->end(), this);
-    PERFETTO_CHECK(it != its->end());
-    its->erase(it);
-
-    base::TimeNanos t_end = base::GetWallTimeNs();
-    auto* sql_stats = trace_processor_->context_.storage->mutable_sql_stats();
-    sql_stats->RecordQueryEnd(sql_stats_row_, t_end.count());
-  }
-}
-
-void TraceProcessor::IteratorImpl::Reset() {
-  *this = IteratorImpl(nullptr, nullptr, ScopedStmt(), 0,
-                       util::ErrStatus("Trace processor was deleted"), 0);
-}
-
-void TraceProcessor::IteratorImpl::RecordFirstNextInSqlStats() {
-  base::TimeNanos t_first_next = base::GetWallTimeNs();
-  auto* sql_stats = trace_processor_->context_.storage->mutable_sql_stats();
-  sql_stats->RecordQueryFirstNext(sql_stats_row_, t_first_next.count());
-}
-
 }  // namespace trace_processor
 }  // namespace perfetto
diff --git a/src/trace_processor/trace_processor_impl.h b/src/trace_processor/trace_processor_impl.h
index c2523a2..84a74f2 100644
--- a/src/trace_processor/trace_processor_impl.h
+++ b/src/trace_processor/trace_processor_impl.h
@@ -113,96 +113,6 @@
   uint64_t bytes_parsed_ = 0;
 };
 
-// The pointer implementation of TraceProcessor::Iterator.
-class TraceProcessor::IteratorImpl {
- public:
-  IteratorImpl(TraceProcessorImpl* impl,
-               sqlite3* db,
-               ScopedStmt,
-               uint32_t column_count,
-               util::Status,
-               uint32_t sql_stats_row);
-  ~IteratorImpl();
-
-  IteratorImpl(IteratorImpl&) noexcept = delete;
-  IteratorImpl& operator=(IteratorImpl&) = delete;
-
-  IteratorImpl(IteratorImpl&&) noexcept = default;
-  IteratorImpl& operator=(IteratorImpl&&) = default;
-
-  // Methods called by TraceProcessor::Iterator.
-  bool Next() {
-    // Delegate to the cc file to prevent trace_storage.h include in this file.
-    if (!called_next_) {
-      RecordFirstNextInSqlStats();
-      called_next_ = true;
-    }
-
-    if (!status_.ok())
-      return false;
-
-    int ret = sqlite3_step(*stmt_);
-    if (PERFETTO_UNLIKELY(ret != SQLITE_ROW && ret != SQLITE_DONE)) {
-      status_ = util::ErrStatus("%s", sqlite3_errmsg(db_));
-      return false;
-    }
-    return ret == SQLITE_ROW;
-  }
-
-  SqlValue Get(uint32_t col) {
-    auto column = static_cast<int>(col);
-    auto col_type = sqlite3_column_type(*stmt_, column);
-    SqlValue value;
-    switch (col_type) {
-      case SQLITE_INTEGER:
-        value.type = SqlValue::kLong;
-        value.long_value = sqlite3_column_int64(*stmt_, column);
-        break;
-      case SQLITE_TEXT:
-        value.type = SqlValue::kString;
-        value.string_value =
-            reinterpret_cast<const char*>(sqlite3_column_text(*stmt_, column));
-        break;
-      case SQLITE_FLOAT:
-        value.type = SqlValue::kDouble;
-        value.double_value = sqlite3_column_double(*stmt_, column);
-        break;
-      case SQLITE_BLOB:
-        value.type = SqlValue::kBytes;
-        value.bytes_value = sqlite3_column_blob(*stmt_, column);
-        value.bytes_count =
-            static_cast<size_t>(sqlite3_column_bytes(*stmt_, column));
-        break;
-      case SQLITE_NULL:
-        value.type = SqlValue::kNull;
-        break;
-    }
-    return value;
-  }
-
-  std::string GetColumnName(uint32_t col) {
-    return sqlite3_column_name(stmt_.get(), static_cast<int>(col));
-  }
-
-  uint32_t ColumnCount() { return column_count_; }
-
-  util::Status Status() { return status_; }
-
-  // Methods called by TraceProcessorImpl.
-  void Reset();
-
- private:
-  void RecordFirstNextInSqlStats();
-
-  TraceProcessorImpl* trace_processor_;
-  sqlite3* db_ = nullptr;
-  ScopedStmt stmt_;
-  uint32_t column_count_ = 0;
-  util::Status status_;
-
-  uint32_t sql_stats_row_ = 0;
-  bool called_next_ = false;
-};
 
 }  // namespace trace_processor
 }  // namespace perfetto
diff --git a/src/trace_processor/trace_processor_shell.cc b/src/trace_processor/trace_processor_shell.cc
index f79b57e..0d8565e 100644
--- a/src/trace_processor/trace_processor_shell.cc
+++ b/src/trace_processor/trace_processor_shell.cc
@@ -437,7 +437,7 @@
   return util::OkStatus();
 }
 
-void PrintQueryResultInteractively(TraceProcessor::Iterator* it,
+void PrintQueryResultInteractively(Iterator* it,
                                    base::TimeNanos t_start,
                                    uint32_t column_width) {
   base::TimeNanos t_end = t_start;
@@ -543,7 +543,7 @@
   return util::OkStatus();
 }
 
-util::Status PrintQueryResultAsCsv(TraceProcessor::Iterator* it, FILE* output) {
+util::Status PrintQueryResultAsCsv(Iterator* it, FILE* output) {
   for (uint32_t c = 0; c < it->ColumnCount(); c++) {
     if (c > 0)
       fprintf(output, ",");
diff --git a/tools/trace_to_text/pprof_builder.cc b/tools/trace_to_text/pprof_builder.cc
index 54a1527..d95f0cc 100644
--- a/tools/trace_to_text/pprof_builder.cc
+++ b/tools/trace_to_text/pprof_builder.cc
@@ -76,7 +76,7 @@
 const View kViews[] = {kAllocObjectsView, kObjectsView, kAllocSpaceView,
                        kSpaceView};
 
-using Iterator = trace_processor::TraceProcessor::Iterator;
+using trace_processor::Iterator;
 
 constexpr const char* kQueryProfiles =
     "select distinct hpa.upid, hpa.ts, p.pid from heap_profile_allocation hpa, "
diff --git a/tools/trace_to_text/trace_to_systrace.cc b/tools/trace_to_text/trace_to_systrace.cc
index e5900c8..d2c4f44 100644
--- a/tools/trace_to_text/trace_to_systrace.cc
+++ b/tools/trace_to_text/trace_to_systrace.cc
@@ -190,7 +190,7 @@
                     TraceWriter* trace_writer,
                     bool wrapped_in_json,
                     Keep truncate_keep) {
-  using Iterator = trace_processor::TraceProcessor::Iterator;
+  using trace_processor::Iterator;
 
   QueryWriter q_writer(tp, trace_writer);
   if (wrapped_in_json) {
diff --git a/tools/trace_to_text/utils.cc b/tools/trace_to_text/utils.cc
index 64a4aee..ee2cebb 100644
--- a/tools/trace_to_text/utils.cc
+++ b/tools/trace_to_text/utils.cc
@@ -37,7 +37,7 @@
 namespace trace_to_text {
 namespace {
 
-using Iterator = trace_processor::TraceProcessor::Iterator;
+using trace_processor::Iterator;
 
 #if PERFETTO_BUILDFLAG(PERFETTO_ZLIB)
 constexpr size_t kCompressionBufferSize = 500 * 1024;
