sqlite3相当强大的一个sql数据库,源代码3w多行,最近看了看里面的源码,感觉里面有很多用得上的地方
1.sqlite3_file接口的设计,看着是不是跟frontc一样(第一版的c转c++翻译器)
typedef struct sqlite3_io_methods sqlite3_io_methods;
struct sqlite3_io_methods {
int iVersion;
int (*xClose)(sqlite3_file*);
int (*xRead)(sqlite3_file*,void*,int iAmt,sqlite3_int64 iOfst);
int (*xWrite)(sqlite3_file*,const void*,sqlite3_int64 iOfst);
int (*xTruncate)(sqlite3_file*,sqlite3_int64 size);
int (*xSync)(sqlite3_file*,int flags);
int (*xFileSize)(sqlite3_file*,sqlite3_int64 *pSize);
int (*xLock)(sqlite3_file*,int);
int (*xUnlock)(sqlite3_file*,int);
int (*xCheckReservedLock)(sqlite3_file*,int *pResOut);
int (*xFileControl)(sqlite3_file*,int op,void *pArg);
int (*xSectorSize)(sqlite3_file*);
int (*xDeviceCharacteristics)(sqlite3_file*);
/* Methods above are valid for version 1 */
int (*xShmMap)(sqlite3_file*,int iPg,int pgsz,int,void volatile**);
int (*xShmLock)(sqlite3_file*,int offset,int n,int flags);
void (*xShmBarrier)(sqlite3_file*);
int (*xShmUnmap)(sqlite3_file*,int deleteFlag);
/* Methods above are valid for version 2 */
int (*xFetch)(sqlite3_file*,sqlite3_int64 iOfst,void **pp);
int (*xUnfetch)(sqlite3_file*,void *p);
/* Methods above are valid for version 3 */
/* Additional methods may be added in future releases */
};
rc = lockProxy->pMethod->xClose((sqlite3_file*)lockProxy);
rc = conchFile->pMethod->xClose((sqlite3_file*)conchFile);
原文链接:https://www.f2er.com/sqlite/200570.html