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); (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|