1 | #include "catch.hpp" |
---|---|
2 | #include "test_helpers.hpp" |
3 | |
4 | using namespace duckdb; |
5 | using namespace std; |
6 | |
7 | TEST_CASE("Test PRAGMA parsing", "[pragma]") { |
8 | unique_ptr<QueryResult> result; |
9 | DuckDB db(nullptr); |
10 | Connection con(db); |
11 | |
12 | // Almost pragma but not quite |
13 | REQUIRE_FAIL(con.Query("PRAG")); |
14 | // Pragma without a keyword |
15 | REQUIRE_FAIL(con.Query("PRAGMA ")); |
16 | // Unknown pragma error |
17 | REQUIRE_FAIL(con.Query("PRAGMA random_unknown_pragma")); |
18 | // Call pragma in wrong way |
19 | REQUIRE_FAIL(con.Query("PRAGMA table_info = 3")); |
20 | |
21 | REQUIRE_NO_FAIL(con.Query("CREATE TABLE integers(i INTEGER)")); |
22 | // Now it should work |
23 | REQUIRE_NO_FAIL(con.Query("PRAGMA table_info('integers');")); |
24 | // Parsing also works with extra spaces |
25 | REQUIRE_NO_FAIL(con.Query(" PRAGMA table_info ('integers');")); |
26 | } |
27 | |
28 | TEST_CASE("Test PRAGMA enable_profiling parsing", "[pragma]") { |
29 | unique_ptr<QueryResult> result; |
30 | DuckDB db(nullptr); |
31 | Connection con(db); |
32 | |
33 | // enable profiling cannot be called |
34 | REQUIRE_FAIL(con.Query("PRAGMA enable_profiling()")); |
35 | REQUIRE_FAIL(con.Query("PRAGMA enable_profiling='unsupported'")); |
36 | REQUIRE_FAIL(con.Query("PRAGMA profiling_output")); |
37 | // select the location of where to save the profiling output (instead of printing to stdout) |
38 | REQUIRE_NO_FAIL(con.Query("PRAGMA profiling_output='test.json'")); |
39 | // but we can clear it again |
40 | REQUIRE_NO_FAIL(con.Query("PRAGMA profiling_output=''")); |
41 | // enable and disable profiling |
42 | REQUIRE_NO_FAIL(con.Query("PRAGMA disable_profiling")); |
43 | // REQUIRE_NO_FAIL(con.Query("PRAGMA enable_profiling")); |
44 | } |
45 | |
46 | TEST_CASE("Test PRAGMA memory_limit", "[pragma]") { |
47 | unique_ptr<QueryResult> result; |
48 | DuckDB db(nullptr); |
49 | Connection con(db); |
50 | |
51 | // set memory_limit |
52 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='1GB'")); |
53 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit=-1")); |
54 | // different units can be used |
55 | // G and GB = gigabyte |
56 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='1G'")); |
57 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='1GB'")); |
58 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='1gb'")); |
59 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit = '1GB'")); |
60 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='1.0gb'")); |
61 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='1.0 gb'")); |
62 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='1.0 gigabytes'")); |
63 | // M and MB = megabyte |
64 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='100M'")); |
65 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='100MB'")); |
66 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='100mb'")); |
67 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='100 megabytes'")); |
68 | // K and KB = kilobyte |
69 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='10000K'")); |
70 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='10000KB'")); |
71 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='10000kb'")); |
72 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='10000 kilobytes'")); |
73 | // B = byte |
74 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='100000B'")); |
75 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='100000b'")); |
76 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='100000 bytes'")); |
77 | // T and TB = terabyte |
78 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='0.01T'")); |
79 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='0.01TB'")); |
80 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='0.01tb'")); |
81 | REQUIRE_NO_FAIL(con.Query("PRAGMA memory_limit='0.01 terabytes'")); |
82 | // no unit or unknown units fail |
83 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit=100")); |
84 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit='0.01BG'")); |
85 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit='0.01BLA'")); |
86 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit='0.01PP'")); |
87 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit='0.01TEST'")); |
88 | // we can't invoke it like this either |
89 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit")); |
90 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit()")); |
91 | REQUIRE_FAIL(con.Query("PRAGMA memory_limit(1, 2)")); |
92 | } |
93 |