123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*
- * Tencent is pleased to support the open source community by making
- * WCDB available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company.
- * All rights reserved.
- *
- * Licensed under the BSD 3-Clause License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * https://opensource.org/licenses/BSD-3-Clause
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef sqliterk_pager_h
- #define sqliterk_pager_h
- #include "sqliterk_crypto.h"
- #include <stdio.h>
- // A legal state transfer is:
- // unchecked --> checking
- // checking --> invalid
- // checking --> damaged
- // checking --> checked
- // checking --> discarded
- // default status is unchecked
- typedef enum {
- sqliterk_status_invalid = -1,
- sqliterk_status_unchecked = 0,
- sqliterk_status_checking = 1,
- sqliterk_status_damaged = 2,
- sqliterk_status_discarded = 3,
- sqliterk_status_checked = 4,
- } sqliterk_status;
- // We are only concerned about the listed types. See https://www.sqlite.org/fileformat2.html#btree
- typedef enum {
- sqliterk_page_type_interior_index = 2,
- sqliterk_page_type_interior_table = 5,
- sqliterk_page_type_leaf_index = 10,
- sqliterk_page_type_leaf_table = 13,
- sqliterk_page_type_overflow = 1,
- sqliterk_page_type_unknown = -1,
- } sqliterk_page_type;
- // sqliterk_pager is the management class for all page in single db file
- typedef struct sqliterk_pager sqliterk_pager;
- // sqliterk_page is single page in db file, including its page data. But sometime, page data will be ahead release to save memory.
- typedef struct sqliterk_page sqliterk_page;
- typedef struct sqliterk_file sqliterk_file;
- typedef struct sqliterk_cipher_conf sqliterk_cipher_conf;
- struct sqliterk_pager {
- sqliterk_file *file;
- sqliterk_status *pagesStatus;
- int pagesize;
- int freepagecount;
- int reservedBytes;
- int pagecount;
- int usableSize; // pagesize-reservedBytes
- unsigned int integrity; // integrity flags.
- sqliterk_codec *codec; // Codec context, implemented in SQLCipher library.
- };
- int sqliterkPagerOpen(const char *path,
- const sqliterk_cipher_conf *cipher,
- sqliterk_pager **pager);
- int sqliterkPagerClose(sqliterk_pager *pager);
- int sqliterkPagerGetPageCount(sqliterk_pager *pager);
- int sqliterkPagerIsPagenoValid(sqliterk_pager *pager, int pageno);
- int sqliterkPagerGetSize(sqliterk_pager *pager);
- int sqliterkPagerGetUsableSize(sqliterk_pager *pager);
- void sqliterkPagerSetStatus(sqliterk_pager *pager,
- int pageno,
- sqliterk_status status);
- sqliterk_status sqliterkPagerGetStatus(sqliterk_pager *pager, int pageno);
- int sqliterkPagerGetParsedPageCount(sqliterk_pager *pager);
- int sqliterkPagerGetValidPageCount(sqliterk_pager *pager);
- unsigned int sqliterkPagerGetIntegrity(sqliterk_pager *pager);
- int sqliterkPageAcquire(sqliterk_pager *pager,
- int pageno,
- sqliterk_page **page);
- int sqliterkPageAcquireOverflow(sqliterk_pager *pager,
- int pageno,
- sqliterk_page **page);
- int sqliterkPageAcquireType(sqliterk_pager *pager,
- int pageno,
- sqliterk_page_type *type);
- int sqliterkPageClearData(sqliterk_page *page);
- int sqliterkPageRelease(sqliterk_page *page);
- int sqliterkPagenoHeaderOffset(int pageno);
- int sqliterkPageHeaderOffset(sqliterk_page *page);
- const unsigned char *sqliterkPageGetData(sqliterk_page *page);
- int sqliterkPageGetPageno(sqliterk_page *page);
- sqliterk_page_type sqliterkPageGetType(sqliterk_page *page);
- const char *sqliterkPageGetTypeName(sqliterk_page_type type);
- #endif /* sqliterk_pager_h */
|