File: prepare_tests.cpp

package info (click to toggle)
poco 1.14.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 56,460 kB
  • sloc: cpp: 340,542; ansic: 245,601; makefile: 1,742; yacc: 1,005; sh: 698; sql: 312; lex: 282; xml: 128; perl: 29; python: 24
file content (84 lines) | stat: -rw-r--r-- 2,583 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

#include "SQLParser.h"
#include "sql_asserts.h"
#include "thirdparty/microtest/microtest.h"

using hsql::kExprLiteralInt;
using hsql::kExprParameter;

using hsql::kStmtDrop;
using hsql::kStmtExecute;
using hsql::kStmtInsert;
using hsql::kStmtPrepare;
using hsql::kStmtSelect;

using hsql::kDropPreparedStatement;

using hsql::DropStatement;
using hsql::ExecuteStatement;
using hsql::InsertStatement;
using hsql::PrepareStatement;
using hsql::SelectStatement;

TEST(PrepareSingleStatementTest) {
  TEST_PARSE_SINGLE_SQL("PREPARE test FROM 'SELECT * FROM students WHERE grade = ?';", kStmtPrepare, PrepareStatement,
                        result, prepare);

  ASSERT_STREQ(prepare->name, "test");
  ASSERT_STREQ(prepare->query, "SELECT * FROM students WHERE grade = ?");

  TEST_PARSE_SINGLE_SQL(prepare->query, kStmtSelect, SelectStatement, result2, select);

  ASSERT_EQ(result2.parameters().size(), 1);
  ASSERT(select->whereClause->expr2->isType(kExprParameter))
  ASSERT_EQ(select->whereClause->expr2->ival, 0)
}

TEST(DeallocatePrepareStatementTest) {
  TEST_PARSE_SINGLE_SQL("DEALLOCATE PREPARE test;", kStmtDrop, DropStatement, result, drop);

  ASSERT_EQ(drop->type, kDropPreparedStatement);
  ASSERT_STREQ(drop->name, "test");
}

TEST(StatementWithParameters) {
  TEST_PARSE_SINGLE_SQL("SELECT * FROM test WHERE a = ? AND b = ?", kStmtSelect, SelectStatement, result, stmt);

  const hsql::Expr* eq1 = stmt->whereClause->expr;
  const hsql::Expr* eq2 = stmt->whereClause->expr2;

  ASSERT_EQ(result.parameters().size(), 2);

  ASSERT_EQ(eq1->opType, hsql::kOpEquals)
  ASSERT(eq1->expr->isType(hsql::kExprColumnRef))
  ASSERT(eq1->expr2->isType(kExprParameter))
  ASSERT_EQ(eq1->expr2->ival, 0)
  ASSERT_EQ(result.parameters()[0], eq1->expr2);

  ASSERT_EQ(eq2->opType, hsql::kOpEquals)
  ASSERT(eq2->expr->isType(hsql::kExprColumnRef))
  ASSERT(eq2->expr2->isType(kExprParameter))
  ASSERT_EQ(eq2->expr2->ival, 1)
  ASSERT_EQ(result.parameters()[1], eq2->expr2);
}

TEST(ExecuteStatementTest) {
  TEST_PARSE_SINGLE_SQL("EXECUTE test(1, 2);", kStmtExecute, ExecuteStatement, result, stmt);

  ASSERT_STREQ(stmt->name, "test");
  ASSERT_EQ(stmt->parameters->size(), 2);
}

TEST(ExecuteStatementTestNoParam) {
  TEST_PARSE_SINGLE_SQL("EXECUTE test();", kStmtExecute, ExecuteStatement, result, stmt);

  ASSERT_STREQ(stmt->name, "test");
  ASSERT_EQ(stmt->parameters, 0);
}

TEST(ExecuteStatementTestNoParamList) {
  TEST_PARSE_SINGLE_SQL("EXECUTE test;", kStmtExecute, ExecuteStatement, result, stmt);

  ASSERT_STREQ(stmt->name, "test");
  ASSERT_EQ(stmt->parameters, 0);
}