diff options
Diffstat (limited to 'src/trace_processor/sqlite/db_sqlite_table_unittest.cc')
-rw-r--r-- | src/trace_processor/sqlite/db_sqlite_table_unittest.cc | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/src/trace_processor/sqlite/db_sqlite_table_unittest.cc b/src/trace_processor/sqlite/db_sqlite_table_unittest.cc index 2fbc3e408..78b696143 100644 --- a/src/trace_processor/sqlite/db_sqlite_table_unittest.cc +++ b/src/trace_processor/sqlite/db_sqlite_table_unittest.cc @@ -1,3 +1,4 @@ + /* * Copyright (C) 2019 The Android Open Source Project * @@ -22,78 +23,71 @@ namespace perfetto { namespace trace_processor { namespace { -class TestTable : public Table { - public: - TestTable(uint32_t row_count) : Table(&pool_, nullptr) { - row_maps_.emplace_back(RowMap(0, row_count)); - row_count_ = row_count; - - columns_.emplace_back(Column::IdColumn(this, 0u, 0u)); - columns_.emplace_back( - Column("a", &a_, Column::Flag::kNoFlag, this, 1u, 0u)); - columns_.emplace_back( - Column("sorted", &sorted_, Column::Flag::kSorted, this, 2u, 0u)); - columns_.emplace_back( - Column("other", &other_, Column::Flag::kNoFlag, this, 3u, 0u)); - columns_.emplace_back( - Column("other2", &other_, Column::Flag::kNoFlag, this, 4u, 0u)); - } - - private: - StringPool pool_; - SparseVector<uint32_t> a_; - SparseVector<uint32_t> sorted_; - SparseVector<uint32_t> other_; - SparseVector<uint32_t> other2_; -}; +Table::Schema CreateSchema() { + Table::Schema schema; + schema.columns.push_back({"id", SqlValue::Type::kLong, true /* is_id */, + true /* is_sorted */, false /* is_hidden */}); + schema.columns.push_back({"type", SqlValue::Type::kLong, false /* is_id */, + false /* is_sorted */, false /* is_hidden */}); + schema.columns.push_back({"test1", SqlValue::Type::kLong, false /* is_id */, + true /* is_sorted */, false /* is_hidden */}); + schema.columns.push_back({"test2", SqlValue::Type::kLong, false /* is_id */, + false /* is_sorted */, false /* is_hidden */}); + schema.columns.push_back({"test3", SqlValue::Type::kLong, false /* is_id */, + false /* is_sorted */, false /* is_hidden */}); + return schema; +} TEST(DbSqliteTable, IdEqCheaperThanOtherEq) { - TestTable table(1234); + auto schema = CreateSchema(); + constexpr uint32_t kRowCount = 1234; QueryConstraints id_eq; id_eq.AddConstraint(0u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); - auto id_cost = DbSqliteTable::EstimateCost(table, id_eq); + auto id_cost = DbSqliteTable::EstimateCost(schema, kRowCount, id_eq); QueryConstraints a_eq; a_eq.AddConstraint(1u, SQLITE_INDEX_CONSTRAINT_EQ, 1u); - auto a_cost = DbSqliteTable::EstimateCost(table, a_eq); + auto a_cost = DbSqliteTable::EstimateCost(schema, kRowCount, a_eq); ASSERT_LT(id_cost.cost, a_cost.cost); ASSERT_LT(id_cost.rows, a_cost.rows); } TEST(DbSqliteTable, IdEqCheaperThatOtherConstraint) { - TestTable table(1234); + auto schema = CreateSchema(); + constexpr uint32_t kRowCount = 1234; QueryConstraints id_eq; id_eq.AddConstraint(0u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); - auto id_cost = DbSqliteTable::EstimateCost(table, id_eq); + auto id_cost = DbSqliteTable::EstimateCost(schema, kRowCount, id_eq); QueryConstraints a_eq; a_eq.AddConstraint(1u, SQLITE_INDEX_CONSTRAINT_LT, 1u); - auto a_cost = DbSqliteTable::EstimateCost(table, a_eq); + auto a_cost = DbSqliteTable::EstimateCost(schema, kRowCount, a_eq); ASSERT_LT(id_cost.cost, a_cost.cost); ASSERT_LT(id_cost.rows, a_cost.rows); } TEST(DbSqliteTable, SingleEqCheaperThanMultipleConstraint) { - TestTable table(1234); + auto schema = CreateSchema(); + constexpr uint32_t kRowCount = 1234; QueryConstraints single_eq; single_eq.AddConstraint(1u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); - auto single_cost = DbSqliteTable::EstimateCost(table, single_eq); + auto single_cost = DbSqliteTable::EstimateCost(schema, kRowCount, single_eq); QueryConstraints multi_eq; multi_eq.AddConstraint(1u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); multi_eq.AddConstraint(2u, SQLITE_INDEX_CONSTRAINT_EQ, 1u); - auto multi_cost = DbSqliteTable::EstimateCost(table, multi_eq); + auto multi_cost = DbSqliteTable::EstimateCost(schema, kRowCount, multi_eq); // The cost of the single filter should be cheaper (because of our special // handling of single equality). But the number of rows should be greater. @@ -102,19 +96,21 @@ TEST(DbSqliteTable, SingleEqCheaperThanMultipleConstraint) { } TEST(DbSqliteTable, MultiSortedEqCheaperThanMultiUnsortedEq) { - TestTable table(1234); + auto schema = CreateSchema(); + constexpr uint32_t kRowCount = 1234; QueryConstraints sorted_eq; sorted_eq.AddConstraint(2u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); sorted_eq.AddConstraint(3u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); - auto sorted_cost = DbSqliteTable::EstimateCost(table, sorted_eq); + auto sorted_cost = DbSqliteTable::EstimateCost(schema, kRowCount, sorted_eq); QueryConstraints unsorted_eq; unsorted_eq.AddConstraint(3u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); unsorted_eq.AddConstraint(4u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); - auto unsorted_cost = DbSqliteTable::EstimateCost(table, unsorted_eq); + auto unsorted_cost = + DbSqliteTable::EstimateCost(schema, kRowCount, unsorted_eq); // The number of rows should be the same but the cost of the sorted // query should be less. @@ -123,34 +119,35 @@ TEST(DbSqliteTable, MultiSortedEqCheaperThanMultiUnsortedEq) { } TEST(DbSqliteTable, EmptyTableCosting) { - TestTable table(0u); + auto schema = CreateSchema(); QueryConstraints id_eq; id_eq.AddConstraint(0u, SQLITE_INDEX_CONSTRAINT_EQ, 0u); - auto id_cost = DbSqliteTable::EstimateCost(table, id_eq); + auto id_cost = DbSqliteTable::EstimateCost(schema, 0, id_eq); QueryConstraints a_eq; a_eq.AddConstraint(1u, SQLITE_INDEX_CONSTRAINT_LT, 1u); - auto a_cost = DbSqliteTable::EstimateCost(table, a_eq); + auto a_cost = DbSqliteTable::EstimateCost(schema, 0, a_eq); ASSERT_DOUBLE_EQ(id_cost.cost, a_cost.cost); ASSERT_EQ(id_cost.rows, a_cost.rows); } TEST(DbSqliteTable, OrderByOnSortedCheaper) { - TestTable table(1234); + auto schema = CreateSchema(); + constexpr uint32_t kRowCount = 1234; QueryConstraints a_qc; a_qc.AddOrderBy(1u, false); - auto a_cost = DbSqliteTable::EstimateCost(table, a_qc); + auto a_cost = DbSqliteTable::EstimateCost(schema, kRowCount, a_qc); // On an ordered column, the constraint for sorting would get pruned so // we would end up with an empty constraint set. QueryConstraints sorted_qc; - auto sorted_cost = DbSqliteTable::EstimateCost(table, sorted_qc); + auto sorted_cost = DbSqliteTable::EstimateCost(schema, kRowCount, sorted_qc); ASSERT_LT(sorted_cost.cost, a_cost.cost); ASSERT_EQ(sorted_cost.rows, a_cost.rows); |