Coverage Report

Created: 2024-07-23 06:37

/src/sql-parser/src/sql/statements.cpp
Line
Count
Source (jump to first uncovered line)
1
#include "statements.h"
2
#include "AlterStatement.h"
3
4
namespace hsql {
5
6
// KeyConstraints
7
TableConstraint::TableConstraint(ConstraintType type, std::vector<char*>* columnNames)
8
10.5k
    : type(type), columnNames(columnNames) {}
9
10
10.5k
TableConstraint::~TableConstraint() {
11
10.7k
  for (char* def : *columnNames) {
12
10.7k
    free(def);
13
10.7k
  }
14
10.5k
  delete columnNames;
15
10.5k
}
16
17
// ColumnDefinition
18
ColumnDefinition::ColumnDefinition(char* name, ColumnType type, std::unordered_set<ConstraintType>* column_constraints)
19
157k
    : column_constraints(column_constraints), name(name), type(type), nullable(true) {}
20
21
157k
ColumnDefinition::~ColumnDefinition() {
22
157k
  free(name);
23
157k
  delete column_constraints;
24
157k
}
25
26
ColumnType::ColumnType(DataType data_type, int64_t length, int64_t precision, int64_t scale)
27
3.48M
    : data_type(data_type), length(length), precision(precision), scale(scale) {}
28
29
0
bool operator==(const ColumnType& lhs, const ColumnType& rhs) {
30
0
  if (lhs.data_type != rhs.data_type) return false;
31
0
  return lhs.length == rhs.length && lhs.precision == rhs.precision && lhs.scale == rhs.scale;
32
0
}
33
34
0
bool operator!=(const ColumnType& lhs, const ColumnType& rhs) { return !(lhs == rhs); }
35
36
0
std::ostream& operator<<(std::ostream& stream, const ColumnType& column_type) {
37
0
  switch (column_type.data_type) {
38
0
    case DataType::UNKNOWN:
39
0
      stream << "UNKNOWN";
40
0
      break;
41
0
    case DataType::INT:
42
0
      stream << "INT";
43
0
      break;
44
0
    case DataType::BIGINT:
45
0
      stream << "BIGINT";
46
0
      break;
47
0
    case DataType::LONG:
48
0
      stream << "LONG";
49
0
      break;
50
0
    case DataType::FLOAT:
51
0
      stream << "FLOAT";
52
0
      break;
53
0
    case DataType::DOUBLE:
54
0
      stream << "DOUBLE";
55
0
      break;
56
0
    case DataType::REAL:
57
0
      stream << "REAL";
58
0
      break;
59
0
    case DataType::CHAR:
60
0
      stream << "CHAR(" << column_type.length << ")";
61
0
      break;
62
0
    case DataType::VARCHAR:
63
0
      stream << "VARCHAR(" << column_type.length << ")";
64
0
      break;
65
0
    case DataType::DECIMAL:
66
0
      stream << "DECIMAL";
67
0
      break;
68
0
    case DataType::TEXT:
69
0
      stream << "TEXT";
70
0
      break;
71
0
    case DataType::DATETIME:
72
0
      stream << "DATETIME";
73
0
      break;
74
0
    case DataType::DATE:
75
0
      stream << "DATE";
76
0
      break;
77
0
    case DataType::TIME:
78
0
      stream << "TIME";
79
0
      break;
80
0
    case DataType::SMALLINT:
81
0
      stream << "SMALLINT";
82
0
      break;
83
0
    case DataType::BOOLEAN:
84
0
      stream << "BOOLEAN";
85
0
      break;
86
0
  }
87
0
  return stream;
88
0
}
89
90
// DeleteStatement
91
2.10k
DeleteStatement::DeleteStatement() : SQLStatement(kStmtDelete), schema(nullptr), tableName(nullptr), expr(nullptr) {}
92
93
2.10k
DeleteStatement::~DeleteStatement() {
94
2.10k
  free(schema);
95
2.10k
  free(tableName);
96
2.10k
  delete expr;
97
2.10k
}
98
99
// DropStatement
100
DropStatement::DropStatement(DropType type)
101
3.75k
    : SQLStatement(kStmtDrop), type(type), schema(nullptr), name(nullptr), indexName(nullptr) {}
102
103
3.75k
DropStatement::~DropStatement() {
104
3.75k
  free(schema);
105
3.75k
  free(name);
106
3.75k
  free(indexName);
107
3.75k
}
108
109
// AlterStatement and supportive classes
110
111
0
AlterAction::AlterAction(ActionType type) : type(type) {}
112
113
0
AlterAction::~AlterAction() = default;
114
115
DropColumnAction::DropColumnAction(char* column_name)
116
0
    : AlterAction(ActionType::DropColumn), columnName(column_name), ifExists(false) {}
117
118
0
DropColumnAction::~DropColumnAction() { free(columnName); }
119
120
AlterStatement::AlterStatement(char* name, AlterAction* action)
121
0
    : SQLStatement(kStmtAlter), schema(nullptr), ifTableExists(false), name(name), action(action) {}
122
123
0
AlterStatement::~AlterStatement() {
124
0
  free(schema);
125
0
  free(name);
126
0
  delete action;
127
0
}
128
129
// TransactionStatement
130
TransactionStatement::TransactionStatement(TransactionCommand command)
131
72.9k
    : SQLStatement(kStmtTransaction), command(command) {}
132
133
72.9k
TransactionStatement::~TransactionStatement() {}
134
135
// ExecuteStatement
136
1.83k
ExecuteStatement::ExecuteStatement() : SQLStatement(kStmtExecute), name(nullptr), parameters(nullptr) {}
137
138
1.83k
ExecuteStatement::~ExecuteStatement() {
139
1.83k
  free(name);
140
141
1.83k
  if (parameters) {
142
714
    for (Expr* param : *parameters) {
143
714
      delete param;
144
714
    }
145
339
    delete parameters;
146
339
  }
147
1.83k
}
148
149
// ExportStatement
150
ExportStatement::ExportStatement(ImportType type)
151
1.68k
    : SQLStatement(kStmtExport), type(type), filePath(nullptr), schema(nullptr), tableName(nullptr), select(nullptr) {}
152
153
1.68k
ExportStatement::~ExportStatement() {
154
1.68k
  free(filePath);
155
1.68k
  free(schema);
156
1.68k
  free(tableName);
157
1.68k
  delete select;
158
1.68k
}
159
160
// ImportStatement
161
ImportStatement::ImportStatement(ImportType type)
162
    : SQLStatement(kStmtImport),
163
      type(type),
164
      filePath(nullptr),
165
      schema(nullptr),
166
      tableName(nullptr),
167
1.64k
      whereClause(nullptr) {}
168
169
1.64k
ImportStatement::~ImportStatement() {
170
1.64k
  free(filePath);
171
1.64k
  free(schema);
172
1.64k
  free(tableName);
173
1.64k
  delete whereClause;
174
1.64k
}
175
176
// InsertStatement
177
InsertStatement::InsertStatement(InsertType type)
178
    : SQLStatement(kStmtInsert),
179
      type(type),
180
      schema(nullptr),
181
      tableName(nullptr),
182
      columns(nullptr),
183
      values(nullptr),
184
2.84k
      select(nullptr) {}
185
186
2.84k
InsertStatement::~InsertStatement() {
187
2.84k
  free(schema);
188
2.84k
  free(tableName);
189
2.84k
  delete select;
190
191
2.84k
  if (columns) {
192
16.8k
    for (char* column : *columns) {
193
16.8k
      free(column);
194
16.8k
    }
195
268
    delete columns;
196
268
  }
197
198
2.84k
  if (values) {
199
1.18k
    for (Expr* expr : *values) {
200
1.18k
      delete expr;
201
1.18k
    }
202
815
    delete values;
203
815
  }
204
2.84k
}
205
206
// ShowStatament
207
3.53k
ShowStatement::ShowStatement(ShowType type) : SQLStatement(kStmtShow), type(type), schema(nullptr), name(nullptr) {}
208
209
3.53k
ShowStatement::~ShowStatement() {
210
3.53k
  free(schema);
211
3.53k
  free(name);
212
3.53k
}
213
214
// SelectStatement.h
215
216
// OrderDescription
217
138k
OrderDescription::OrderDescription(OrderType type, Expr* expr) : type(type), expr(expr) {}
218
219
138k
OrderDescription::~OrderDescription() { delete expr; }
220
221
// LimitDescription
222
4.89k
LimitDescription::LimitDescription(Expr* limit, Expr* offset) : limit(limit), offset(offset) {}
223
224
4.89k
LimitDescription::~LimitDescription() {
225
4.89k
  delete limit;
226
4.89k
  delete offset;
227
4.89k
}
228
229
// GroypByDescription
230
2.33k
GroupByDescription::GroupByDescription() : columns(nullptr), having(nullptr) {}
231
232
2.33k
GroupByDescription::~GroupByDescription() {
233
2.33k
  delete having;
234
235
2.33k
  if (columns) {
236
3.51k
    for (Expr* expr : *columns) {
237
3.51k
      delete expr;
238
3.51k
    }
239
2.33k
    delete columns;
240
2.33k
  }
241
2.33k
}
242
243
3.15k
WithDescription::~WithDescription() {
244
3.15k
  free(alias);
245
3.15k
  delete select;
246
3.15k
}
247
248
// SelectStatement
249
SelectStatement::SelectStatement()
250
    : SQLStatement(kStmtSelect),
251
      fromTable(nullptr),
252
      selectDistinct(false),
253
      selectList(nullptr),
254
      whereClause(nullptr),
255
      groupBy(nullptr),
256
      setOperations(nullptr),
257
      order(nullptr),
258
      withDescriptions(nullptr),
259
      limit(nullptr),
260
61.3k
      lockings(nullptr) {}
261
262
27.8k
SelectStatement::~SelectStatement() {
263
27.8k
  delete fromTable;
264
27.8k
  delete whereClause;
265
27.8k
  delete groupBy;
266
27.8k
  delete limit;
267
268
  // Delete each element in the select list.
269
27.8k
  if (selectList) {
270
217k
    for (Expr* expr : *selectList) {
271
217k
      delete expr;
272
217k
    }
273
27.8k
    delete selectList;
274
27.8k
  }
275
276
27.8k
  if (order) {
277
8.57k
    for (OrderDescription* desc : *order) {
278
8.57k
      delete desc;
279
8.57k
    }
280
1.13k
    delete order;
281
1.13k
  }
282
283
27.8k
  if (withDescriptions) {
284
3.15k
    for (WithDescription* desc : *withDescriptions) {
285
3.15k
      delete desc;
286
3.15k
    }
287
416
    delete withDescriptions;
288
416
  }
289
290
27.8k
  if (setOperations) {
291
3.23k
    for (SetOperation* setOperation : *setOperations) {
292
3.23k
      delete setOperation;
293
3.23k
    }
294
2.68k
    delete setOperations;
295
2.68k
  }
296
297
27.8k
  if (lockings) {
298
6.85k
    for (LockingClause* lockingClause : *lockings) {
299
6.85k
      if (lockingClause->tables) {
300
8.65k
        for (char* dtable : *lockingClause->tables) {
301
8.65k
          free(dtable);
302
8.65k
        }
303
260
        delete lockingClause->tables;
304
260
      }
305
6.85k
      delete lockingClause;
306
6.85k
    }
307
453
    delete lockings;
308
453
  }
309
27.8k
}
310
311
// UpdateStatement
312
1.42k
UpdateStatement::UpdateStatement() : SQLStatement(kStmtUpdate), table(nullptr), updates(nullptr), where(nullptr) {}
313
314
1.42k
UpdateStatement::~UpdateStatement() {
315
1.42k
  delete table;
316
1.42k
  delete where;
317
318
1.42k
  if (updates) {
319
2.96k
    for (UpdateClause* update : *updates) {
320
2.96k
      free(update->column);
321
2.96k
      delete update->value;
322
2.96k
      delete update;
323
2.96k
    }
324
1.42k
    delete updates;
325
1.42k
  }
326
1.42k
}
327
328
// Alias
329
8.80k
Alias::Alias(char* name, std::vector<char*>* columns) : name(name), columns(columns) {}
330
331
8.80k
Alias::~Alias() {
332
8.80k
  free(name);
333
8.80k
  if (columns) {
334
1.33k
    for (char* column : *columns) {
335
1.33k
      free(column);
336
1.33k
    }
337
313
    delete columns;
338
313
  }
339
8.80k
}
340
341
// TableRef
342
TableRef::TableRef(TableRefType type)
343
494k
    : type(type), schema(nullptr), name(nullptr), alias(nullptr), select(nullptr), list(nullptr), join(nullptr) {}
344
345
494k
TableRef::~TableRef() {
346
494k
  free(schema);
347
494k
  free(name);
348
349
494k
  delete select;
350
494k
  delete join;
351
494k
  delete alias;
352
353
494k
  if (list) {
354
110k
    for (TableRef* table : *list) {
355
110k
      delete table;
356
110k
    }
357
1.07k
    delete list;
358
1.07k
  }
359
494k
}
360
361
0
bool TableRef::hasSchema() const { return schema != nullptr; }
362
363
0
const char* TableRef::getName() const {
364
0
  if (alias)
365
0
    return alias->name;
366
0
  else
367
0
    return name;
368
0
}
369
370
// JoinDefinition
371
JoinDefinition::JoinDefinition()
372
110k
    : left(nullptr), right(nullptr), condition(nullptr), namedColumns(nullptr), type(kJoinInner) {}
373
374
110k
JoinDefinition::~JoinDefinition() {
375
110k
  delete left;
376
110k
  delete right;
377
110k
  delete condition;
378
379
110k
  if (namedColumns) {
380
1.00k
    for (auto* column : *namedColumns) {
381
1.00k
      free(column);
382
1.00k
    }
383
810
    delete namedColumns;
384
810
  }
385
110k
}
386
387
4.52k
SetOperation::SetOperation() : nestedSelectStatement(nullptr), resultOrder(nullptr), resultLimit(nullptr) {}
388
389
4.52k
SetOperation::~SetOperation() {
390
4.52k
  delete nestedSelectStatement;
391
4.52k
  delete resultLimit;
392
393
4.52k
  if (resultOrder) {
394
1.04k
    for (OrderDescription* desc : *resultOrder) {
395
1.04k
      delete desc;
396
1.04k
    }
397
414
    delete resultOrder;
398
414
  }
399
4.52k
}
400
401
}  // namespace hsql