Skip to content

Commit ce5b6d1

Browse files
author
Shriram Rajagopalan
committed
Adding table access tracking
1 parent 62d1625 commit ce5b6d1

18 files changed

+254
-24
lines changed

src/sql/CreateStatement.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define SQLPARSER_CREATE_STATEMENT_H
33

44
#include "SQLStatement.h"
5+
#include "TableAccess.h"
56

67
#include <ostream>
78

@@ -53,7 +54,14 @@ namespace hsql {
5354
struct CreateStatement : SQLStatement {
5455
CreateStatement(CreateType type);
5556
virtual ~CreateStatement();
56-
57+
void tablesAccessed(TableAccessMap& accessMap) const override {
58+
if (select != nullptr) {
59+
select->tablesAccessed(accessMap);
60+
}
61+
if (tableName != nullptr) {
62+
TableAccess::addWriteEntry(accessMap, tableName, schema);
63+
}
64+
};
5765
CreateType type;
5866
bool ifNotExists; // default: false
5967
char* filePath; // default: nullptr

src/sql/DeleteStatement.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@ namespace hsql {
1212
struct DeleteStatement : SQLStatement {
1313
DeleteStatement();
1414
virtual ~DeleteStatement();
15-
15+
void tablesAccessed(TableAccessMap& accessMap) const override {
16+
if (expr != nullptr) {
17+
expr->tablesAccessed(accessMap);
18+
}
19+
if (tableName != nullptr) {
20+
TableAccess::addWriteEntry(accessMap, tableName, schema);
21+
}
22+
}
1623
char* schema;
1724
char* tableName;
1825
Expr* expr;

src/sql/DropStatement.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ namespace hsql {
2020

2121
DropStatement(DropType type);
2222
virtual ~DropStatement();
23-
23+
void tablesAccessed(TableAccessMap& accessMap) const override {
24+
if (name != nullptr) {
25+
TableAccess::addWriteEntry(accessMap, name, schema);
26+
}
27+
};
2428
DropType type;
2529
bool ifExists;
2630
char* schema;

src/sql/ExecuteStatement.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ namespace hsql {
1010
struct ExecuteStatement : SQLStatement {
1111
ExecuteStatement();
1212
virtual ~ExecuteStatement();
13+
void tablesAccessed(TableAccessMap& accessMap) const override {
14+
if (parameters != nullptr) {
15+
for (auto it = parameters->begin(); it != parameters->end(); ++it) {
16+
(*it)->tablesAccessed(accessMap);
17+
}
18+
}
19+
};
1320

1421
char* name;
1522
std::vector<Expr*>* parameters;

src/sql/Expr.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,26 @@ char* substr(const char* source, int from, int to) {
251251
copy[len] = '\0';
252252
return copy;
253253
}
254+
255+
void Expr::tablesAccessed(TableAccessMap& accessMap) const {
256+
if (expr != nullptr) {
257+
expr->tablesAccessed(accessMap);
258+
}
259+
if (expr2 != nullptr) {
260+
expr2->tablesAccessed(accessMap);
261+
}
262+
if (exprList != nullptr) {
263+
for (Expr* e : *exprList) {
264+
if (e != nullptr) {
265+
e->tablesAccessed(accessMap);
266+
}
267+
}
268+
}
269+
if (select != nullptr) {
270+
select->tablesAccessed(accessMap);
271+
}
272+
if (table != nullptr) {
273+
TableAccess::addReadEntry(accessMap, table, nullptr);
274+
}
275+
}
254276
} // namespace hsql

src/sql/Expr.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include <stdlib.h>
55
#include <memory>
66
#include <vector>
7-
7+
#include "TableAccess.h"
88
namespace hsql {
99
struct SelectStatement;
1010

@@ -84,7 +84,7 @@ typedef struct Expr Expr;
8484
// Represents SQL expressions (i.e. literals, operators, column_refs).
8585
// TODO: When destructing a placeholder expression, we might need to alter the
8686
// placeholder_list.
87-
struct Expr {
87+
struct Expr : public TableAccess {
8888
Expr(ExprType type);
8989
virtual ~Expr();
9090

@@ -107,6 +107,9 @@ struct Expr {
107107
OperatorType opType;
108108
bool distinct;
109109

110+
// TableAccess
111+
void tablesAccessed(TableAccessMap& accessMap) const override;
112+
110113
// Convenience accessor methods.
111114

112115
bool isType(ExprType exprType) const;

src/sql/ImportStatement.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ namespace hsql {
1313
struct ImportStatement : SQLStatement {
1414
ImportStatement(ImportType type);
1515
virtual ~ImportStatement();
16+
void tablesAccessed(TableAccessMap& accessMap) const override {
17+
if (tableName != nullptr) {
18+
TableAccess::addWriteEntry(accessMap, tableName, schema);
19+
}
20+
};
1621

1722
ImportType type;
1823
char* filePath;

src/sql/InsertStatement.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@ namespace hsql {
1515
struct InsertStatement : SQLStatement {
1616
InsertStatement(InsertType type);
1717
virtual ~InsertStatement();
18+
void tablesAccessed(TableAccessMap& accessMap) const override {
19+
if (tableName != nullptr) {
20+
TableAccess::addWriteEntry(accessMap, tableName, schema);
21+
}
22+
if (values != nullptr) {
23+
for (auto it = values->begin(); it != values->end(); ++it) {
24+
(*it)->tablesAccessed(accessMap);
25+
}
26+
}
27+
if (select != nullptr) {
28+
select->tablesAccessed(accessMap);
29+
}
30+
};
1831

1932
InsertType type;
2033
char* schema;

src/sql/PrepareStatement.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ namespace hsql {
1010
struct PrepareStatement : SQLStatement {
1111
PrepareStatement();
1212
virtual ~PrepareStatement();
13+
void tablesAccessed(TableAccessMap& accessMap) const override {
14+
};
1315

1416
char* name;
1517

src/sql/SQLStatement.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,4 @@ namespace hsql {
2828
bool SQLStatement::is(StatementType type) const {
2929
return isType(type);
3030
}
31-
3231
}

0 commit comments

Comments
 (0)