Skip to content

Commit bc3b742

Browse files
authored
Spring 2024: P3 Index Changes (#702)
Updates index plan node and adds sqllogictests to be consistent with the new project specs.
1 parent 325775a commit bc3b742

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

src/include/execution/plans/index_scan_plan.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
#include <string>
1616
#include <utility>
17+
#include <vector>
1718

1819
#include "catalog/catalog.h"
1920
#include "concurrency/transaction.h"
2021
#include "execution/expressions/abstract_expression.h"
21-
#include "execution/expressions/constant_value_expression.h"
2222
#include "execution/plans/abstract_plan.h"
2323

2424
namespace bustub {
@@ -35,12 +35,12 @@ class IndexScanPlanNode : public AbstractPlanNode {
3535
* @param pred_key The key for point lookup
3636
*/
3737
IndexScanPlanNode(SchemaRef output, table_oid_t table_oid, index_oid_t index_oid,
38-
AbstractExpressionRef filter_predicate = nullptr, ConstantValueExpression *pred_key = nullptr)
38+
AbstractExpressionRef filter_predicate = nullptr, std::vector<AbstractExpressionRef> pred_keys = {})
3939
: AbstractPlanNode(std::move(output), {}),
4040
table_oid_(table_oid),
4141
index_oid_(index_oid),
4242
filter_predicate_(std::move(filter_predicate)),
43-
pred_key_(pred_key) {}
43+
pred_keys_(std::move(pred_keys)) {}
4444

4545
auto GetType() const -> PlanType override { return PlanType::IndexScan; }
4646

@@ -62,10 +62,10 @@ class IndexScanPlanNode : public AbstractPlanNode {
6262
AbstractExpressionRef filter_predicate_;
6363

6464
/**
65-
* The constant value key to lookup.
65+
* The constant value keys to lookup.
6666
* For example when dealing "WHERE v = 1" we could store the constant value 1 here
6767
*/
68-
const ConstantValueExpression *pred_key_;
68+
std::vector<AbstractExpressionRef> pred_keys_;
6969

7070
// Add anything you want here for index lookup
7171

test/sql/p3.05-index-scan.slt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ select * from t1 where v2 = 40;
4545
----
4646
2 40 721
4747

48+
statement ok
49+
explain select * from t1 where v1 = 1 or v1 = 2;
50+
51+
query rowsort +ensure:index_scan
52+
select * from t1 where v1 = 1 or v1 = 2;
53+
----
54+
1 50 645
55+
2 40 721
4856

4957
query
5058
select * from t1 where v1 = 1 and v2 = 50;
@@ -99,6 +107,12 @@ select * from t1 where v2 = 20;
99107
----
100108
4 20 445
101109

110+
query rowsort +ensure:index_scan
111+
select * from t1 where v1 = 7 or 3 = v1;
112+
----
113+
7 -10 645
114+
3 30 645
115+
102116
query +ensure:index_scan
103117
select * from t1 where v2 = 40;
104118
----
@@ -151,6 +165,38 @@ select * from t1 where v2 = 0 and v3 = 721;
151165
----
152166
6 0 721
153167

168+
query +ensure:seq_scan
169+
select * from t1 where v1 = 7 or 10 = v2;
170+
----
171+
5 10 445
172+
7 -10 645
173+
174+
query rowsort +ensure:index_scan
175+
select * from t1 where v1 = 7 or v1 = 3 or 5 = v1;
176+
----
177+
7 -10 645
178+
3 30 645
179+
5 10 445
180+
181+
query +ensure:index_scan
182+
select * from t1 where v1 = 3 or v1 = 3 or v1 = 3
183+
----
184+
3 30 645
185+
186+
query +ensure:index_scan
187+
select * from t1 where v1 = 3 or v1 = 5 or v1 = 1 or v1 = 5
188+
----
189+
5 10 445
190+
1 50 645
191+
3 30 645
192+
193+
query +ensure:seq_scan
194+
select * from t1 where v1 = 7 or v1 = 3 or 5 = v1 or 3 = v2;
195+
----
196+
5 10 445
197+
3 30 645
198+
7 -10 645
199+
154200
# Delete some elements
155201
query
156202
delete from t1 where v2 = 30;

0 commit comments

Comments
 (0)