1 | //===----------------------------------------------------------------------===// |
2 | // DuckDB |
3 | // |
4 | // duckdb/common/constants.hpp |
5 | // |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #pragma once |
10 | |
11 | #include <memory> |
12 | #include "duckdb/common/string.hpp" |
13 | #include "duckdb/common/winapi.hpp" |
14 | #include "duckdb/common/unique_ptr.hpp" |
15 | #include "duckdb/common/typedefs.hpp" |
16 | |
17 | namespace duckdb { |
18 | class Serializer; |
19 | class Deserializer; |
20 | |
21 | //! inline std directives that we use frequently |
22 | #ifndef DUCKDB_DEBUG_MOVE |
23 | using std::move; |
24 | #endif |
25 | |
26 | // NOTE: there is a copy of this in the Postgres' parser grammar (gram.y) |
27 | #define DEFAULT_SCHEMA "main" |
28 | #define INVALID_SCHEMA "" |
29 | #define INVALID_CATALOG "" |
30 | #define SYSTEM_CATALOG "system" |
31 | #define TEMP_CATALOG "temp" |
32 | |
33 | DUCKDB_API bool IsInvalidSchema(const string &str); |
34 | DUCKDB_API bool IsInvalidCatalog(const string &str); |
35 | |
36 | //! Special value used to signify the ROW ID of a table |
37 | DUCKDB_API extern const column_t COLUMN_IDENTIFIER_ROW_ID; |
38 | DUCKDB_API bool IsRowIdColumnId(column_t column_id); |
39 | |
40 | //! The maximum row identifier used in tables |
41 | extern const row_t MAX_ROW_ID; |
42 | |
43 | extern const transaction_t TRANSACTION_ID_START; |
44 | extern const transaction_t MAX_TRANSACTION_ID; |
45 | extern const transaction_t MAXIMUM_QUERY_ID; |
46 | extern const transaction_t NOT_DELETED_ID; |
47 | |
48 | extern const double PI; |
49 | |
50 | struct DConstants { |
51 | //! The value used to signify an invalid index entry |
52 | static constexpr const idx_t INVALID_INDEX = idx_t(-1); |
53 | }; |
54 | |
55 | struct Storage { |
56 | //! The size of a hard disk sector, only really needed for Direct IO |
57 | constexpr static int SECTOR_SIZE = 4096; |
58 | //! Block header size for blocks written to the storage |
59 | constexpr static int = sizeof(uint64_t); |
60 | // Size of a memory slot managed by the StorageManager. This is the quantum of allocation for Blocks on DuckDB. We |
61 | // default to 256KB. (1 << 18) |
62 | constexpr static int BLOCK_ALLOC_SIZE = 262144; |
63 | //! The actual memory space that is available within the blocks |
64 | constexpr static int BLOCK_SIZE = BLOCK_ALLOC_SIZE - BLOCK_HEADER_SIZE; |
65 | //! The size of the headers. This should be small and written more or less atomically by the hard disk. We default |
66 | //! to the page size, which is 4KB. (1 << 12) |
67 | constexpr static int = 4096; |
68 | }; |
69 | |
70 | struct LogicalIndex { |
71 | explicit LogicalIndex(idx_t index) : index(index) { |
72 | } |
73 | |
74 | idx_t index; |
75 | |
76 | inline bool operator==(const LogicalIndex &rhs) const { |
77 | return index == rhs.index; |
78 | }; |
79 | inline bool operator!=(const LogicalIndex &rhs) const { |
80 | return index != rhs.index; |
81 | }; |
82 | inline bool operator<(const LogicalIndex &rhs) const { |
83 | return index < rhs.index; |
84 | }; |
85 | bool IsValid() { |
86 | return index != DConstants::INVALID_INDEX; |
87 | } |
88 | }; |
89 | |
90 | struct PhysicalIndex { |
91 | explicit PhysicalIndex(idx_t index) : index(index) { |
92 | } |
93 | |
94 | idx_t index; |
95 | |
96 | inline bool operator==(const PhysicalIndex &rhs) const { |
97 | return index == rhs.index; |
98 | }; |
99 | inline bool operator!=(const PhysicalIndex &rhs) const { |
100 | return index != rhs.index; |
101 | }; |
102 | inline bool operator<(const PhysicalIndex &rhs) const { |
103 | return index < rhs.index; |
104 | }; |
105 | bool IsValid() { |
106 | return index != DConstants::INVALID_INDEX; |
107 | } |
108 | }; |
109 | |
110 | DUCKDB_API bool IsPowerOfTwo(uint64_t v); |
111 | DUCKDB_API uint64_t NextPowerOfTwo(uint64_t v); |
112 | DUCKDB_API uint64_t PreviousPowerOfTwo(uint64_t v); |
113 | |
114 | } // namespace duckdb |
115 | |