sqliterk_btree.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Tencent is pleased to support the open source community by making
  3. * WCDB available.
  4. *
  5. * Copyright (C) 2017 THL A29 Limited, a Tencent company.
  6. * All rights reserved.
  7. *
  8. * Licensed under the BSD 3-Clause License (the "License"); you may not use
  9. * this file except in compliance with the License. You may obtain a copy of
  10. * the License at
  11. *
  12. * https://opensource.org/licenses/BSD-3-Clause
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an "AS IS" BASIS,
  16. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. */
  20. #ifndef sqliterk_btree_h
  21. #define sqliterk_btree_h
  22. // About sqliterk_btree, see https://www.sqlite.org/fileformat2.html#btree
  23. typedef struct sqliterk_btree sqliterk_btree;
  24. typedef struct sqliterk_pager sqliterk_pager;
  25. typedef struct sqliterk_values sqliterk_values;
  26. typedef struct sqliterk_column sqliterk_column;
  27. typedef struct sqliterk_page sqliterk_page;
  28. typedef struct sqliterk sqliterk;
  29. typedef struct sqliterk_btree_notify sqliterk_btree_notify;
  30. typedef enum {
  31. sqliterk_btree_type_index = -2,
  32. sqliterk_btree_type_table = -1,
  33. sqliterk_btree_type_unknown = 0,
  34. // About SQLite reserved btree, see [Storage Of The SQL Database Schema]
  35. // chapter at https://www.sqlite.org/fileformat2.html#Schema
  36. sqliterk_btree_type_system_begin = 1,
  37. sqliterk_btree_type_sequence = 1,
  38. sqliterk_btree_type_autoindex = 2,
  39. sqliterk_btree_type_stat = 3,
  40. sqliterk_btree_type_master = 4,
  41. sqliterk_btree_type_system_end = 5,
  42. } sqliterk_btree_type;
  43. struct sqliterk_btree_notify {
  44. void (*onBeginParseBtree)(sqliterk *rk, sqliterk_btree *btree);
  45. void (*onEndParseBtree)(sqliterk *rk, sqliterk_btree *btree, int result);
  46. int (*onParseColumn)(sqliterk *rk,
  47. sqliterk_btree *btree,
  48. sqliterk_page *page,
  49. sqliterk_column *column);
  50. // return SQLITE_OK to continue parsing the page. All other return
  51. // value will skip the parsing phase of this page.
  52. int (*onBeginParsePage)(sqliterk *rk, sqliterk_btree *btree, int pageno);
  53. void (*onEndParsePage)(sqliterk *rk,
  54. sqliterk_btree *btree,
  55. int pageno,
  56. int result);
  57. };
  58. int sqliterkBtreeOpen(sqliterk *rk,
  59. sqliterk_pager *pager,
  60. int rootPageno,
  61. sqliterk_btree **btree);
  62. int sqliterkBtreeParse(sqliterk_btree *btree);
  63. int sqliterkBtreeClose(sqliterk_btree *btree);
  64. int sqliterkBtreeSetMeta(sqliterk_btree *btree,
  65. const char *name,
  66. sqliterk_btree_type type);
  67. const char *sqliterkBtreeGetName(sqliterk_btree *btree);
  68. sqliterk_btree_type sqliterkBtreeGetType(sqliterk_btree *btree);
  69. int sqliterkBtreeIsSystemType(sqliterk_btree_type type);
  70. sqliterk_page *sqliterkBtreeGetRootPage(sqliterk_btree *btree);
  71. void sqliterkBtreeSetNotify(sqliterk_btree *btree,
  72. sqliterk_btree_notify *notify);
  73. void sqliterkBtreeSetUserInfo(sqliterk_btree *btree, void *userInfo);
  74. void *sqliterkBtreeGetUserInfo(sqliterk_btree *btree);
  75. const char *sqliterkBtreeGetTypeName(sqliterk_btree_type type);
  76. #endif /* sqliterk_btree_h */