20#ifndef PROTOCORE_SQLITE_FORMAT_H
21#define PROTOCORE_SQLITE_FORMAT_H
25#if PROTOCORE_ENABLE_SQLITE
34size_t protocore_sqlite_varint_decode(
const uint8_t *buf,
size_t len, uint64_t *out);
42uint64_t protocore_sqlite_serial_type_size(uint64_t serial_type);
48 uint8_t write_version;
50 uint8_t reserved_per_page;
51 uint32_t file_change_counter;
53 uint32_t freelist_first;
54 uint32_t freelist_count;
55 uint32_t schema_cookie;
56 uint32_t schema_format;
57 uint32_t text_encoding;
58 uint32_t user_version;
59 uint32_t application_id;
60 uint32_t protocore_sqlite_version;
67proto_bool protocore_sqlite_parse_db_header(
const uint8_t *buf,
size_t len, SqliteDbHeader *out);
72#define SQLITE_BTREE_INTERIOR_INDEX 2
73#define SQLITE_BTREE_INTERIOR_TABLE 5
74#define SQLITE_BTREE_LEAF_INDEX 10
75#define SQLITE_BTREE_LEAF_TABLE 13
81 uint16_t first_freeblock;
83 uint32_t cell_content_start;
84 uint8_t frag_free_bytes;
85 uint32_t right_most_page;
94proto_bool protocore_sqlite_parse_btree_header(
const uint8_t *page,
size_t page_len,
size_t offset,
95 SqliteBtreeHeader *out);
101uint32_t protocore_sqlite_cell_pointer(
const uint8_t *page,
size_t page_len,
const SqliteBtreeHeader *bh,
102 size_t page_offset, uint16_t i);
108 uint32_t payload_len;
112} SqliteTableLeafCell;
121proto_bool protocore_sqlite_parse_table_leaf_cell(
const uint8_t *page,
size_t page_len, uint32_t page_size,
122 uint8_t reserved, uint32_t cell_off, SqliteTableLeafCell *out);
135proto_bool protocore_sqlite_record_begin(SqliteRecordCursor *c,
const uint8_t *rec, uint32_t rec_len);
141proto_bool protocore_sqlite_record_next(SqliteRecordCursor *c, uint64_t *serial_type,
const uint8_t **val,
145int64_t protocore_sqlite_column_int(uint64_t serial_type,
const uint8_t *val, uint32_t val_len);
148double protocore_sqlite_column_float(
const uint8_t *val, uint32_t val_len);
151#define SQLITE_BTREE_MAX_DEPTH 20
158typedef proto_bool (*SqlitePageReader)(
void *ctx, uint32_t pgno, uint8_t *page, uint32_t page_size);
178proto_bool protocore_sqlite_read_payload(SqlitePageReader read,
void *ctx, uint32_t page_size, uint8_t reserved,
179 const uint8_t *leaf_page,
const SqliteTableLeafCell *cell, uint8_t *out,
180 uint32_t out_cap, uint8_t *work_page);
195 SqlitePageReader read;
203 uint32_t stack_pg[SQLITE_BTREE_MAX_DEPTH];
204 uint16_t stack_idx[SQLITE_BTREE_MAX_DEPTH];
206 SqliteBtreeHeader leaf_hdr;
219void protocore_sqlite_table_cursor_set_overflow_buf(SqliteTableCursor *c, uint8_t *buf, uint32_t cap);
225proto_bool protocore_sqlite_table_cursor_begin(SqliteTableCursor *c, SqlitePageReader read,
void *ctx,
226 uint32_t page_size, uint8_t reserved, uint32_t rootpage,
227 uint8_t *leaf_buf, uint8_t *work_buf);
233proto_bool protocore_sqlite_table_cursor_next(SqliteTableCursor *c, uint64_t *rowid, SqliteRecordCursor *row);
246size_t protocore_sqlite_varint_encode(uint64_t v, uint8_t *out,
size_t cap);
274uint32_t protocore_sqlite_encode_record(
const SqliteValue *cols, uint32_t n, uint8_t *out, uint32_t out_cap);
280 const SqliteValue *cols;
296uint32_t protocore_sqlite_build_table_db(uint32_t page_size,
const char *table_name,
const char *create_sql,
297 const SqliteRow *rows, uint32_t nrows, uint8_t *out, uint32_t out_cap);
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS