Copy disabled (too large)
Download .txt
Showing preview only (32,173K chars total). Download the full file to get everything.
Repository: Tencent/wcdb
Branch: master
Commit: a49cad2cd804
Files: 2870
Total size: 83.3 MB
Directory structure:
gitextract__428ffi_/
├── .clang-format
├── .github/
│ └── stale.yml
├── .gitignore
├── .gitmodules
├── .swift-version
├── CHANGELOG.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── Package.swift
├── README.md
├── VERSION
├── WCDB.cpp.podspec
├── WCDB.objc.podspec
├── WCDB.podspec
├── WCDB.swift.podspec
├── deprecated/
│ └── android/
│ ├── .gitignore
│ ├── Android.mk
│ ├── Application.mk
│ ├── addons/
│ │ ├── backup/
│ │ │ ├── mm_backup.c
│ │ │ ├── mm_backup.h
│ │ │ └── mm_recover.c
│ │ ├── fts/
│ │ │ ├── fts3_tokenizer.h
│ │ │ ├── mm_cipher.c
│ │ │ ├── mm_fts.h
│ │ │ ├── mm_sqliteext.c
│ │ │ ├── mm_tokenizer.c
│ │ │ └── mm_utils.c
│ │ ├── icucompat/
│ │ │ ├── icucompat.c
│ │ │ ├── icucompat.h
│ │ │ ├── icuprototype.h
│ │ │ └── unicode/
│ │ │ ├── alphaindex.h
│ │ │ ├── appendable.h
│ │ │ ├── basictz.h
│ │ │ ├── bms.h
│ │ │ ├── bmsearch.h
│ │ │ ├── brkiter.h
│ │ │ ├── bytestream.h
│ │ │ ├── bytestrie.h
│ │ │ ├── bytestriebuilder.h
│ │ │ ├── calendar.h
│ │ │ ├── caniter.h
│ │ │ ├── chariter.h
│ │ │ ├── choicfmt.h
│ │ │ ├── coleitr.h
│ │ │ ├── coll.h
│ │ │ ├── colldata.h
│ │ │ ├── curramt.h
│ │ │ ├── currpinf.h
│ │ │ ├── currunit.h
│ │ │ ├── datefmt.h
│ │ │ ├── dbbi.h
│ │ │ ├── dcfmtsym.h
│ │ │ ├── decimfmt.h
│ │ │ ├── docmain.h
│ │ │ ├── dtfmtsym.h
│ │ │ ├── dtintrv.h
│ │ │ ├── dtitvfmt.h
│ │ │ ├── dtitvinf.h
│ │ │ ├── dtptngen.h
│ │ │ ├── dtrule.h
│ │ │ ├── enumset.h
│ │ │ ├── errorcode.h
│ │ │ ├── fieldpos.h
│ │ │ ├── fmtable.h
│ │ │ ├── format.h
│ │ │ ├── fpositer.h
│ │ │ ├── gender.h
│ │ │ ├── gregocal.h
│ │ │ ├── icudataver.h
│ │ │ ├── icuplug.h
│ │ │ ├── idna.h
│ │ │ ├── listformatter.h
│ │ │ ├── localpointer.h
│ │ │ ├── locdspnm.h
│ │ │ ├── locid.h
│ │ │ ├── measfmt.h
│ │ │ ├── measunit.h
│ │ │ ├── measure.h
│ │ │ ├── messagepattern.h
│ │ │ ├── msgfmt.h
│ │ │ ├── normalizer2.h
│ │ │ ├── normlzr.h
│ │ │ ├── numfmt.h
│ │ │ ├── numsys.h
│ │ │ ├── parseerr.h
│ │ │ ├── parsepos.h
│ │ │ ├── platform.h
│ │ │ ├── plurfmt.h
│ │ │ ├── plurrule.h
│ │ │ ├── ptypes.h
│ │ │ ├── putil.h
│ │ │ ├── rbbi.h
│ │ │ ├── rbnf.h
│ │ │ ├── rbtz.h
│ │ │ ├── regex.h
│ │ │ ├── rep.h
│ │ │ ├── resbund.h
│ │ │ ├── schriter.h
│ │ │ ├── search.h
│ │ │ ├── selfmt.h
│ │ │ ├── simpletz.h
│ │ │ ├── smpdtfmt.h
│ │ │ ├── sortkey.h
│ │ │ ├── std_string.h
│ │ │ ├── strenum.h
│ │ │ ├── stringpiece.h
│ │ │ ├── stringtriebuilder.h
│ │ │ ├── stsearch.h
│ │ │ ├── symtable.h
│ │ │ ├── tblcoll.h
│ │ │ ├── timezone.h
│ │ │ ├── tmunit.h
│ │ │ ├── tmutamt.h
│ │ │ ├── tmutfmt.h
│ │ │ ├── translit.h
│ │ │ ├── tzfmt.h
│ │ │ ├── tznames.h
│ │ │ ├── tzrule.h
│ │ │ ├── tztrans.h
│ │ │ ├── ubidi.h
│ │ │ ├── ubrk.h
│ │ │ ├── ucal.h
│ │ │ ├── ucasemap.h
│ │ │ ├── ucat.h
│ │ │ ├── uchar.h
│ │ │ ├── ucharstrie.h
│ │ │ ├── ucharstriebuilder.h
│ │ │ ├── uchriter.h
│ │ │ ├── uclean.h
│ │ │ ├── ucnv.h
│ │ │ ├── ucnv_cb.h
│ │ │ ├── ucnv_err.h
│ │ │ ├── ucnvsel.h
│ │ │ ├── ucol.h
│ │ │ ├── ucoleitr.h
│ │ │ ├── uconfig.h
│ │ │ ├── ucsdet.h
│ │ │ ├── ucurr.h
│ │ │ ├── udat.h
│ │ │ ├── udata.h
│ │ │ ├── udateintervalformat.h
│ │ │ ├── udatpg.h
│ │ │ ├── udisplaycontext.h
│ │ │ ├── uenum.h
│ │ │ ├── ugender.h
│ │ │ ├── uidna.h
│ │ │ ├── uiter.h
│ │ │ ├── uldnames.h
│ │ │ ├── uloc.h
│ │ │ ├── ulocdata.h
│ │ │ ├── umachine.h
│ │ │ ├── umisc.h
│ │ │ ├── umsg.h
│ │ │ ├── unifilt.h
│ │ │ ├── unifunct.h
│ │ │ ├── unimatch.h
│ │ │ ├── unirepl.h
│ │ │ ├── uniset.h
│ │ │ ├── unistr.h
│ │ │ ├── unorm.h
│ │ │ ├── unorm2.h
│ │ │ ├── unum.h
│ │ │ ├── uobject.h
│ │ │ ├── upluralrules.h
│ │ │ ├── uregex.h
│ │ │ ├── urename.h
│ │ │ ├── urep.h
│ │ │ ├── ures.h
│ │ │ ├── uscript.h
│ │ │ ├── usearch.h
│ │ │ ├── uset.h
│ │ │ ├── usetiter.h
│ │ │ ├── ushape.h
│ │ │ ├── uspoof.h
│ │ │ ├── usprep.h
│ │ │ ├── ustring.h
│ │ │ ├── ustringtrie.h
│ │ │ ├── utext.h
│ │ │ ├── utf.h
│ │ │ ├── utf16.h
│ │ │ ├── utf32.h
│ │ │ ├── utf8.h
│ │ │ ├── utf_old.h
│ │ │ ├── utmscale.h
│ │ │ ├── utrace.h
│ │ │ ├── utrans.h
│ │ │ ├── utypes.h
│ │ │ ├── uvernum.h
│ │ │ ├── uversion.h
│ │ │ └── vtzone.h
│ │ ├── repair/
│ │ │ ├── SQLiteRepairKit.h
│ │ │ ├── sqliterk.c
│ │ │ ├── sqliterk.h
│ │ │ ├── sqliterk_api.c
│ │ │ ├── sqliterk_btree.c
│ │ │ ├── sqliterk_output.cpp
│ │ │ ├── sqliterk_pager.c
│ │ │ ├── sqliterk_pager.h
│ │ │ └── sqliterk_values.c
│ │ └── vfslog/
│ │ ├── vfslog.c
│ │ └── vfslog.h
│ ├── build.gradle
│ ├── gradle/
│ │ ├── WeChatArmeabiCompat.gradle
│ │ ├── WeChatNativeDepend.gradle
│ │ ├── WeChatPublish.gradle
│ │ ├── doclava-1.0.6.jar
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── jni/
│ │ ├── ChunkedCursorWindow.cpp
│ │ ├── ChunkedCursorWindow.h
│ │ ├── CursorWindow.cpp
│ │ ├── CursorWindow.h
│ │ ├── Errors.h
│ │ ├── JNIHelp.cpp
│ │ ├── JNIHelp.h
│ │ ├── Logger.c
│ │ ├── Logger.h
│ │ ├── ModuleLoader.c
│ │ ├── ModuleLoader.h
│ │ ├── Mutex.h
│ │ ├── SQLiteCommon.cpp
│ │ ├── SQLiteCommon.h
│ │ ├── Unicode.cpp
│ │ ├── Unicode.h
│ │ ├── com_tencent_wcdb_CursorWindow.cpp
│ │ ├── com_tencent_wcdb_FileUtils.cpp
│ │ ├── com_tencent_wcdb_database_ChunkedCursorWindow.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteConnection.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteDebug.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteDirectQuery.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteGlobal.cpp
│ │ ├── com_tencent_wcdb_extension_fts_MMFtsTokenizer.cpp
│ │ ├── com_tencent_wcdb_repair_Backup.cpp
│ │ ├── com_tencent_wcdb_repair_DBDumpUtil.cpp
│ │ ├── com_tencent_wcdb_repair_RepairKit.cpp
│ │ └── com_tencent_wcdb_support_Log.cpp
│ ├── room/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── tencent/
│ │ └── wcdb/
│ │ └── room/
│ │ └── db/
│ │ ├── WCDBDatabase.java
│ │ ├── WCDBOpenHelper.java
│ │ ├── WCDBOpenHelperFactory.java
│ │ ├── WCDBProgram.java
│ │ └── WCDBStatement.java
│ ├── samples/
│ │ ├── benchmark/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ ├── src/
│ │ │ │ ├── androidTest/
│ │ │ │ │ └── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── benchmark/
│ │ │ │ │ ├── concurrent/
│ │ │ │ │ │ ├── ConcurrentTest.java
│ │ │ │ │ │ ├── FrameworkConcurrentTest.java
│ │ │ │ │ │ ├── FrameworkWalConcurrentTest.java
│ │ │ │ │ │ ├── SQLCipherConcurrentTest.java
│ │ │ │ │ │ ├── SQLCipherEncryptedConcurrentTest.java
│ │ │ │ │ │ ├── WCDBConcurrentTest.java
│ │ │ │ │ │ ├── WCDBEncryptedConcurrentTest.java
│ │ │ │ │ │ ├── WCDBWalConcurrentTest.java
│ │ │ │ │ │ └── WCDBWalEncryptedConcurrentTest.java
│ │ │ │ │ └── single/
│ │ │ │ │ ├── FrameworkSingleThreadedTest.java
│ │ │ │ │ ├── FrameworkWalSingleThreadedTest.java
│ │ │ │ │ ├── SQLCipherEncryptedSingleThreadedTest.java
│ │ │ │ │ ├── SQLCipherSingleThreadedTest.java
│ │ │ │ │ ├── SingleThreadedTest.java
│ │ │ │ │ ├── WCDBEncryptedSingleThreadedTest.java
│ │ │ │ │ ├── WCDBSingleThreadedTest.java
│ │ │ │ │ ├── WCDBWalAsyncCpSingleThreadedTest.java
│ │ │ │ │ ├── WCDBWalEncryptedAsyncCpSingleThreadedTest.java
│ │ │ │ │ ├── WCDBWalEncryptedSingleThreadedTest.java
│ │ │ │ │ └── WCDBWalSingleThreadedTest.java
│ │ │ │ └── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── res/
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── summary.awk
│ │ ├── sample-encryptdb/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdb/
│ │ │ │ └── sample/
│ │ │ │ └── encryptdb/
│ │ │ │ └── ExampleInstrumentedTest.java
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── sample/
│ │ │ │ │ └── encryptdb/
│ │ │ │ │ ├── EncryptedDBHelper.java
│ │ │ │ │ ├── MainActivity.java
│ │ │ │ │ └── PlainTextDBHelper.java
│ │ │ │ └── res/
│ │ │ │ ├── layout/
│ │ │ │ │ ├── activity_main.xml
│ │ │ │ │ └── main_listitem.xml
│ │ │ │ ├── menu/
│ │ │ │ │ └── menu_main.xml
│ │ │ │ └── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ └── sample/
│ │ │ └── encryptdb/
│ │ │ └── ExampleUnitTest.java
│ │ ├── sample-persistence/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── wcdb/
│ │ │ │ └── sample/
│ │ │ │ └── persistence/
│ │ │ │ └── ExampleInstrumentedTest.java
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── sample/
│ │ │ │ │ └── persistence/
│ │ │ │ │ ├── MainActivity.java
│ │ │ │ │ └── entity/
│ │ │ │ │ ├── AppDatabase.java
│ │ │ │ │ ├── User.java
│ │ │ │ │ └── UserDao.java
│ │ │ │ └── res/
│ │ │ │ ├── layout/
│ │ │ │ │ └── activity_main.xml
│ │ │ │ └── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── wcdb/
│ │ │ └── sample/
│ │ │ └── persistence/
│ │ │ └── ExampleUnitTest.java
│ │ ├── sample-repairdb/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdb/
│ │ │ │ └── sample/
│ │ │ │ └── repairdb/
│ │ │ │ └── ExampleInstrumentedTest.java
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── sample/
│ │ │ │ │ └── repairdb/
│ │ │ │ │ ├── DBHelper.java
│ │ │ │ │ └── MainActivity.java
│ │ │ │ └── res/
│ │ │ │ ├── layout/
│ │ │ │ │ ├── activity_main.xml
│ │ │ │ │ └── main_listitem.xml
│ │ │ │ └── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ └── sample/
│ │ │ └── repairdb/
│ │ │ └── ExampleUnitTest.java
│ │ └── sample-room-with-a-view/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── android/
│ │ │ └── roomwordssample/
│ │ │ ├── LiveDataTestUtil.java
│ │ │ └── WordDaoTest.java
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── android/
│ │ │ └── roomwordssample/
│ │ │ ├── MainActivity.java
│ │ │ ├── NewWordActivity.java
│ │ │ ├── Word.java
│ │ │ ├── WordDao.java
│ │ │ ├── WordListAdapter.java
│ │ │ ├── WordRepository.java
│ │ │ ├── WordRoomDatabase.java
│ │ │ └── WordViewModel.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ ├── ic_add_black_24dp.xml
│ │ │ └── ic_launcher_background.xml
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_new_word.xml
│ │ │ ├── content_main.xml
│ │ │ └── recyclerview_item.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── settings.gradle
│ ├── sqlcipher/
│ │ ├── sqlcipher.h
│ │ ├── sqlite3.c
│ │ ├── sqlite3.h
│ │ ├── sqlite3ext.h
│ │ └── sqlite3session.h
│ └── wcdb/
│ ├── .gitignore
│ ├── AndroidManifest.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── com/
│ └── tencent/
│ └── wcdb/
│ ├── AbstractCursor.java
│ ├── AbstractWindowedCursor.java
│ ├── BulkCursorDescriptor.java
│ ├── BulkCursorNative.java
│ ├── BulkCursorToCursorAdaptor.java
│ ├── CrossProcessCursor.java
│ ├── CrossProcessCursorWrapper.java
│ ├── Cursor.java
│ ├── CursorIndexOutOfBoundsException.java
│ ├── CursorJoiner.java
│ ├── CursorToBulkCursorAdaptor.java
│ ├── CursorWindow.aidl
│ ├── CursorWindow.java
│ ├── CursorWindowAllocationException.java
│ ├── CursorWrapper.java
│ ├── DatabaseErrorHandler.java
│ ├── DatabaseUtils.java
│ ├── DefaultDatabaseErrorHandler.java
│ ├── FileUtils.java
│ ├── IBulkCursor.java
│ ├── IContentObserver.aidl
│ ├── MatrixCursor.java
│ ├── MergeCursor.java
│ ├── Observable.java
│ ├── SQLException.java
│ ├── StaleDataException.java
│ ├── database/
│ │ ├── ChunkedCursorWindow.java
│ │ ├── DatabaseObjectNotClosedException.java
│ │ ├── SQLiteAbortException.java
│ │ ├── SQLiteAccessPermException.java
│ │ ├── SQLiteAsyncCheckpointer.java
│ │ ├── SQLiteAsyncCursor.java
│ │ ├── SQLiteAsyncQuery.java
│ │ ├── SQLiteBindOrColumnIndexOutOfRangeException.java
│ │ ├── SQLiteBlobTooBigException.java
│ │ ├── SQLiteCantOpenDatabaseException.java
│ │ ├── SQLiteChangeListener.java
│ │ ├── SQLiteCheckpointListener.java
│ │ ├── SQLiteCipherSpec.java
│ │ ├── SQLiteClosable.java
│ │ ├── SQLiteConnection.java
│ │ ├── SQLiteConnectionPool.java
│ │ ├── SQLiteConstraintException.java
│ │ ├── SQLiteCursor.java
│ │ ├── SQLiteCursorDriver.java
│ │ ├── SQLiteCustomFunction.java
│ │ ├── SQLiteDatabase.java
│ │ ├── SQLiteDatabaseConfiguration.java
│ │ ├── SQLiteDatabaseCorruptException.java
│ │ ├── SQLiteDatabaseLockedException.java
│ │ ├── SQLiteDatatypeMismatchException.java
│ │ ├── SQLiteDebug.java
│ │ ├── SQLiteDirectCursor.java
│ │ ├── SQLiteDirectCursorDriver.java
│ │ ├── SQLiteDirectQuery.java
│ │ ├── SQLiteDiskIOException.java
│ │ ├── SQLiteDoneException.java
│ │ ├── SQLiteException.java
│ │ ├── SQLiteFullException.java
│ │ ├── SQLiteGlobal.java
│ │ ├── SQLiteMisuseException.java
│ │ ├── SQLiteOpenHelper.java
│ │ ├── SQLiteOutOfMemoryException.java
│ │ ├── SQLiteProgram.java
│ │ ├── SQLiteQuery.java
│ │ ├── SQLiteQueryBuilder.java
│ │ ├── SQLiteReadOnlyDatabaseException.java
│ │ ├── SQLiteSession.java
│ │ ├── SQLiteStatement.java
│ │ ├── SQLiteStatementInfo.java
│ │ ├── SQLiteTableLockedException.java
│ │ └── SQLiteTrace.java
│ ├── extension/
│ │ ├── SQLiteExtension.java
│ │ └── fts/
│ │ └── MMFtsTokenizer.java
│ ├── repair/
│ │ ├── BackupKit.java
│ │ ├── DBDumpUtil.java
│ │ ├── RecoverKit.java
│ │ └── RepairKit.java
│ └── support/
│ ├── CancellationSignal.java
│ ├── Context.java
│ ├── ICancellationSignal.aidl
│ ├── Log.java
│ ├── LogPrinter.java
│ ├── LruCache.java
│ ├── OperationCanceledException.java
│ └── PrefixPrinter.java
├── src/
│ ├── CMakeLists.txt
│ ├── WCDB.h
│ ├── WCDB.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── xcshareddata/
│ │ ├── IDETemplateMacros.plist
│ │ ├── xcbaselines/
│ │ │ └── 23FC43C521B6631200FA1A0F.xcbaseline/
│ │ │ ├── 977CB5EE-2755-4C27-9E15-11B0C28E0E28.plist
│ │ │ ├── C3BF6D2F-DC2A-49AB-B150-DE139BD363B3.plist
│ │ │ ├── F4C9EB05-986B-414D-A7A7-E320B90A0C7D.plist
│ │ │ └── Info.plist
│ │ └── xcschemes/
│ │ ├── BenchmarkTest.xcscheme
│ │ ├── CppTests.xcscheme
│ │ ├── Host.xcscheme
│ │ ├── ObjcTests.xcscheme
│ │ ├── SwiftBridgeObjcTest.xcscheme
│ │ ├── SwiftTests.xcscheme
│ │ ├── WCDB.xcscheme
│ │ ├── WCDBCpp.xcscheme
│ │ ├── WCDBObjc.xcscheme
│ │ └── WCDBSwift.xcscheme
│ ├── bridge/
│ │ ├── WCDBBridging.h
│ │ ├── base/
│ │ │ ├── ContainerBridge.cpp
│ │ │ ├── ContainerBridge.h
│ │ │ ├── ErrorBridge.cpp
│ │ │ ├── ErrorBridge.h
│ │ │ ├── ObjectBridge.cpp
│ │ │ ├── ObjectBridge.h
│ │ │ └── ObjectBridge.hpp
│ │ ├── cppbridge/
│ │ │ ├── BindingBridge.cpp
│ │ │ ├── BindingBridge.h
│ │ │ ├── CoreBridge.cpp
│ │ │ ├── CoreBridge.h
│ │ │ ├── DatabaseBridge.cpp
│ │ │ ├── DatabaseBridge.h
│ │ │ ├── FTSBridge.cpp
│ │ │ ├── FTSBridge.h
│ │ │ ├── HandleBridge.cpp
│ │ │ ├── HandleBridge.h
│ │ │ ├── HandleStatementBridge.cpp
│ │ │ └── HandleStatementBridge.h
│ │ ├── module.modulemap
│ │ ├── objcbridge/
│ │ │ ├── WCTAPIBridge.h
│ │ │ ├── WCTAPIBridge.mm
│ │ │ └── WCTBridgeMacro.h
│ │ ├── tests/
│ │ │ ├── common/
│ │ │ │ ├── Assert.swift
│ │ │ │ ├── BaseTestCase.swift
│ │ │ │ ├── Convenience.swift
│ │ │ │ └── SwiftBridgeObjcTest-Bridging-Header.h
│ │ │ └── crud/
│ │ │ ├── AdvanceCRUDTests.swift
│ │ │ ├── AutoAddColumnObject.h
│ │ │ ├── AutoAddColumnObject.mm
│ │ │ ├── AutoAddColumnTests.swift
│ │ │ ├── CRUDObject.h
│ │ │ ├── CRUDObject.mm
│ │ │ ├── CRUDObject.swift
│ │ │ ├── CRUDTestCase.swift
│ │ │ ├── DatabaseTestCase.swift
│ │ │ ├── DeleteInterfaceTests.swift
│ │ │ ├── DeleteTests.swift
│ │ │ ├── InsertInterfaceTests.swift
│ │ │ ├── InsertTests.swift
│ │ │ ├── MultiSelectTests.swift
│ │ │ ├── RowSelectTests.swift
│ │ │ ├── SelectInterfaceTests.swift
│ │ │ ├── SelectTests.swift
│ │ │ ├── UpdateInterfaceTests.swift
│ │ │ └── UpdateTests.swift
│ │ └── winqbridge/
│ │ ├── WinqBridge.cpp
│ │ ├── WinqBridge.h
│ │ ├── WinqBridge.hpp
│ │ ├── identifier/
│ │ │ ├── BindParameterBridge.cpp
│ │ │ ├── BindParameterBridge.h
│ │ │ ├── ColumnBridge.cpp
│ │ │ ├── ColumnBridge.h
│ │ │ ├── ColumnConstraintBridge.cpp
│ │ │ ├── ColumnConstraintBridge.h
│ │ │ ├── ColumnDefBridge.cpp
│ │ │ ├── ColumnDefBridge.h
│ │ │ ├── CommonTableExpressionBridge.cpp
│ │ │ ├── CommonTableExpressionBridge.h
│ │ │ ├── ExpressionBridge.cpp
│ │ │ ├── ExpressionBridge.h
│ │ │ ├── ExpressionOperatableBridge.cpp
│ │ │ ├── ExpressionOperatableBridge.h
│ │ │ ├── ForeignKeyBridge.cpp
│ │ │ ├── ForeignKeyBridge.h
│ │ │ ├── FrameSpecBridge.cpp
│ │ │ ├── FrameSpecBridge.h
│ │ │ ├── IndexedColumnBridge.cpp
│ │ │ ├── IndexedColumnBridge.h
│ │ │ ├── JoinBridge.cpp
│ │ │ ├── JoinBridge.h
│ │ │ ├── LiteralValueBridge.cpp
│ │ │ ├── LiteralValueBridge.h
│ │ │ ├── OrderingTermBridge.cpp
│ │ │ ├── OrderingTermBridge.h
│ │ │ ├── PragmaBridge.cpp
│ │ │ ├── PragmaBridge.h
│ │ │ ├── QualifiedTableBridge.cpp
│ │ │ ├── QualifiedTableBridge.h
│ │ │ ├── RaiseFunctionBridge.cpp
│ │ │ ├── RaiseFunctionBridge.h
│ │ │ ├── ResultColumnBridge.cpp
│ │ │ ├── ResultColumnBridge.h
│ │ │ ├── SchemaBridge.cpp
│ │ │ ├── SchemaBridge.h
│ │ │ ├── TableConstraintBridge.cpp
│ │ │ ├── TableConstraintBridge.h
│ │ │ ├── TableOrSubqueryBridge.cpp
│ │ │ ├── TableOrSubqueryBridge.h
│ │ │ ├── UpsertBridge.cpp
│ │ │ ├── UpsertBridge.h
│ │ │ ├── WindowDefBridge.cpp
│ │ │ └── WindowDefBridge.h
│ │ └── statement/
│ │ ├── StatementAlterTableBridge.cpp
│ │ ├── StatementAlterTableBridge.h
│ │ ├── StatementAnalyzeBridge.cpp
│ │ ├── StatementAnalyzeBridge.h
│ │ ├── StatementAttachBridge.cpp
│ │ ├── StatementAttachBridge.h
│ │ ├── StatementBeginBridge.cpp
│ │ ├── StatementBeginBridge.h
│ │ ├── StatementCommitBridge.cpp
│ │ ├── StatementCommitBridge.h
│ │ ├── StatementCreateIndexBridge.cpp
│ │ ├── StatementCreateIndexBridge.h
│ │ ├── StatementCreateTableBridge.cpp
│ │ ├── StatementCreateTableBridge.h
│ │ ├── StatementCreateTriggerBridge.cpp
│ │ ├── StatementCreateTriggerBridge.h
│ │ ├── StatementCreateViewBridge.cpp
│ │ ├── StatementCreateViewBridge.h
│ │ ├── StatementCreateVirtualTableBridge.cpp
│ │ ├── StatementCreateVirtualTableBridge.h
│ │ ├── StatementDeleteBridge.cpp
│ │ ├── StatementDeleteBridge.h
│ │ ├── StatementDetachBridge.cpp
│ │ ├── StatementDetachBridge.h
│ │ ├── StatementDropIndexBridge.cpp
│ │ ├── StatementDropIndexBridge.h
│ │ ├── StatementDropTableBridge.cpp
│ │ ├── StatementDropTableBridge.h
│ │ ├── StatementDropTriggerBridge.cpp
│ │ ├── StatementDropTriggerBridge.h
│ │ ├── StatementDropViewBridge.cpp
│ │ ├── StatementDropViewBridge.h
│ │ ├── StatementExplainBridge.cpp
│ │ ├── StatementExplainBridge.h
│ │ ├── StatementInsertBridge.cpp
│ │ ├── StatementInsertBridge.h
│ │ ├── StatementPragmaBridge.cpp
│ │ ├── StatementPragmaBridge.h
│ │ ├── StatementReindexBridge.cpp
│ │ ├── StatementReindexBridge.h
│ │ ├── StatementReleaseBridge.cpp
│ │ ├── StatementReleaseBridge.h
│ │ ├── StatementRollbackBridge.cpp
│ │ ├── StatementRollbackBridge.h
│ │ ├── StatementSavepointBridge.cpp
│ │ ├── StatementSavepointBridge.h
│ │ ├── StatementSelectBridge.cpp
│ │ ├── StatementSelectBridge.h
│ │ ├── StatementUpdateBridge.cpp
│ │ ├── StatementUpdateBridge.h
│ │ ├── StatementVacuumBridge.cpp
│ │ └── StatementVacuumBridge.h
│ ├── common/
│ │ ├── base/
│ │ │ ├── Assertion.hpp
│ │ │ ├── ClassDecorator.hpp
│ │ │ ├── Console.cpp
│ │ │ ├── Console.hpp
│ │ │ ├── DBOperationNotifier.cpp
│ │ │ ├── DBOperationNotifier.hpp
│ │ │ ├── Data.cpp
│ │ │ ├── Data.hpp
│ │ │ ├── ErrorProne.cpp
│ │ │ ├── ErrorProne.hpp
│ │ │ ├── FileHandle.cpp
│ │ │ ├── FileHandle.hpp
│ │ │ ├── FileManager.cpp
│ │ │ ├── FileManager.hpp
│ │ │ ├── FunctionContainer.cpp
│ │ │ ├── FunctionContainer.hpp
│ │ │ ├── HighWater.cpp
│ │ │ ├── HighWater.hpp
│ │ │ ├── LRUCache.hpp
│ │ │ ├── Lock.cpp
│ │ │ ├── Lock.hpp
│ │ │ ├── MappedData.cpp
│ │ │ ├── MappedData.hpp
│ │ │ ├── MemberPointer.hpp
│ │ │ ├── Notifier.cpp
│ │ │ ├── Notifier.hpp
│ │ │ ├── Path.cpp
│ │ │ ├── Path.hpp
│ │ │ ├── Progress.cpp
│ │ │ ├── Progress.hpp
│ │ │ ├── Range.cpp
│ │ │ ├── Range.hpp
│ │ │ ├── Recyclable.cpp
│ │ │ ├── Recyclable.hpp
│ │ │ ├── SQLite.h
│ │ │ ├── SQLiteDeclaration.h
│ │ │ ├── Serialization.cpp
│ │ │ ├── Serialization.hpp
│ │ │ ├── SharedThreadedErrorProne.cpp
│ │ │ ├── SharedThreadedErrorProne.hpp
│ │ │ ├── StringView.cpp
│ │ │ ├── StringView.hpp
│ │ │ ├── Thread.cpp
│ │ │ ├── Thread.hpp
│ │ │ ├── ThreadLocal.hpp
│ │ │ ├── ThreadedErrors.cpp
│ │ │ ├── ThreadedErrors.hpp
│ │ │ ├── Time.cpp
│ │ │ ├── Time.hpp
│ │ │ ├── UnsafeData.cpp
│ │ │ ├── UnsafeData.hpp
│ │ │ ├── WCDBError.cpp
│ │ │ ├── WCDBError.hpp
│ │ │ ├── WCDBOptional.cpp
│ │ │ └── WCDBOptional.hpp
│ │ ├── core/
│ │ │ ├── CommonCore.cpp
│ │ │ ├── CommonCore.h
│ │ │ ├── CommonCore.hpp
│ │ │ ├── CoreConst.cpp
│ │ │ ├── CoreConst.h
│ │ │ ├── DatabasePool.cpp
│ │ │ ├── DatabasePool.hpp
│ │ │ ├── HandleCounter.cpp
│ │ │ ├── HandleCounter.hpp
│ │ │ ├── HandlePool.cpp
│ │ │ ├── HandlePool.hpp
│ │ │ ├── InnerDatabase.cpp
│ │ │ ├── InnerDatabase.hpp
│ │ │ ├── InnerHandle.cpp
│ │ │ ├── InnerHandle.hpp
│ │ │ ├── RecyclableHandle.cpp
│ │ │ ├── RecyclableHandle.hpp
│ │ │ ├── Tag.cpp
│ │ │ ├── Tag.hpp
│ │ │ ├── assemble/
│ │ │ │ ├── AssembleHandleOperator.cpp
│ │ │ │ └── AssembleHandleOperator.hpp
│ │ │ ├── cipher/
│ │ │ │ ├── CipherHandle.cpp
│ │ │ │ └── CipherHandle.hpp
│ │ │ ├── compression/
│ │ │ │ ├── AutoCompressConfig.cpp
│ │ │ │ ├── AutoCompressConfig.hpp
│ │ │ │ ├── CompressHandleOperator.cpp
│ │ │ │ ├── CompressHandleOperator.hpp
│ │ │ │ ├── CompressingHandleDecorator.cpp
│ │ │ │ ├── CompressingHandleDecorator.hpp
│ │ │ │ ├── CompressingStatementDecorator.cpp
│ │ │ │ ├── CompressingStatementDecorator.hpp
│ │ │ │ ├── Compression.cpp
│ │ │ │ ├── Compression.hpp
│ │ │ │ ├── CompressionCenter.cpp
│ │ │ │ ├── CompressionCenter.hpp
│ │ │ │ ├── CompressionConst.cpp
│ │ │ │ ├── CompressionConst.hpp
│ │ │ │ ├── CompressionInfo.cpp
│ │ │ │ ├── CompressionInfo.hpp
│ │ │ │ ├── CompressionRecord.cpp
│ │ │ │ ├── CompressionRecord.hpp
│ │ │ │ ├── DecompressFunction.cpp
│ │ │ │ ├── DecompressFunction.hpp
│ │ │ │ ├── ZSTDContext.cpp
│ │ │ │ ├── ZSTDContext.hpp
│ │ │ │ ├── ZSTDDict.cpp
│ │ │ │ └── ZSTDDict.hpp
│ │ │ ├── config/
│ │ │ │ ├── AutoBackupConfig.cpp
│ │ │ │ ├── AutoBackupConfig.hpp
│ │ │ │ ├── AutoCheckpointConfig.cpp
│ │ │ │ ├── AutoCheckpointConfig.hpp
│ │ │ │ ├── AutoVacuumConfig.cpp
│ │ │ │ ├── AutoVacuumConfig.hpp
│ │ │ │ ├── BasicConfig.cpp
│ │ │ │ ├── BasicConfig.hpp
│ │ │ │ ├── BusyRetryConfig.cpp
│ │ │ │ ├── BusyRetryConfig.hpp
│ │ │ │ ├── CipherConfig.cpp
│ │ │ │ ├── CipherConfig.hpp
│ │ │ │ ├── Config.cpp
│ │ │ │ ├── Config.hpp
│ │ │ │ ├── Configs.cpp
│ │ │ │ ├── Configs.hpp
│ │ │ │ ├── CustomConfig.cpp
│ │ │ │ ├── CustomConfig.hpp
│ │ │ │ ├── PerformanceTraceConfig.cpp
│ │ │ │ ├── PerformanceTraceConfig.hpp
│ │ │ │ ├── SQLTraceConfig.cpp
│ │ │ │ └── SQLTraceConfig.hpp
│ │ │ ├── fts/
│ │ │ │ ├── AutoMergeFTSIndexConfig.cpp
│ │ │ │ ├── AutoMergeFTSIndexConfig.hpp
│ │ │ │ ├── FTSConst.h
│ │ │ │ ├── FTSError.cpp
│ │ │ │ ├── FTSError.hpp
│ │ │ │ ├── MergeFTSIndexLogic.cpp
│ │ │ │ ├── MergeFTSIndexLogic.hpp
│ │ │ │ ├── auxfunction/
│ │ │ │ │ ├── AuxiliaryFunctionConfig.cpp
│ │ │ │ │ ├── AuxiliaryFunctionConfig.hpp
│ │ │ │ │ ├── AuxiliaryFunctionModule.cpp
│ │ │ │ │ ├── AuxiliaryFunctionModule.hpp
│ │ │ │ │ ├── FTS5AuxiliaryFunctionTemplate.hpp
│ │ │ │ │ ├── SubstringMatchInfo.cpp
│ │ │ │ │ └── SubstringMatchInfo.hpp
│ │ │ │ └── tokenizer/
│ │ │ │ ├── AndroidUnicodeDefine.h
│ │ │ │ ├── AndroidUnicodeFunctions.h
│ │ │ │ ├── BaseTokenizerUtil.cpp
│ │ │ │ ├── BaseTokenizerUtil.hpp
│ │ │ │ ├── MMICUTokenizer.cpp
│ │ │ │ ├── MMICUTokenizer.hpp
│ │ │ │ ├── OneOrBinaryTokenizer.cpp
│ │ │ │ ├── OneOrBinaryTokenizer.hpp
│ │ │ │ ├── PinyinTokenizer.cpp
│ │ │ │ ├── PinyinTokenizer.hpp
│ │ │ │ ├── PorterStemming.c
│ │ │ │ ├── SQLiteFTS3Tokenizer.h
│ │ │ │ ├── TokenizerConfig.cpp
│ │ │ │ ├── TokenizerConfig.hpp
│ │ │ │ ├── TokenizerModule.cpp
│ │ │ │ ├── TokenizerModule.hpp
│ │ │ │ ├── TokenizerModuleTemplate.hpp
│ │ │ │ ├── TokenizerModules.cpp
│ │ │ │ └── TokenizerModules.hpp
│ │ │ ├── function/
│ │ │ │ ├── FunctionModules.hpp
│ │ │ │ └── scalar/
│ │ │ │ ├── ScalarFunctionConfig.cpp
│ │ │ │ ├── ScalarFunctionConfig.hpp
│ │ │ │ ├── ScalarFunctionModule.cpp
│ │ │ │ ├── ScalarFunctionModule.hpp
│ │ │ │ └── ScalarFunctionTemplate.hpp
│ │ │ ├── integrity/
│ │ │ │ ├── IntegerityHandleOperator.cpp
│ │ │ │ └── IntegerityHandleOperator.hpp
│ │ │ ├── migration/
│ │ │ │ ├── AutoMigrateConfig.cpp
│ │ │ │ ├── AutoMigrateConfig.hpp
│ │ │ │ ├── MigrateHandleOperator.cpp
│ │ │ │ ├── MigrateHandleOperator.hpp
│ │ │ │ ├── MigratingHandleDecorator.cpp
│ │ │ │ ├── MigratingHandleDecorator.hpp
│ │ │ │ ├── MigratingStatementDecorator.cpp
│ │ │ │ ├── MigratingStatementDecorator.hpp
│ │ │ │ ├── Migration.cpp
│ │ │ │ ├── Migration.hpp
│ │ │ │ ├── MigrationInfo.cpp
│ │ │ │ └── MigrationInfo.hpp
│ │ │ ├── operate/
│ │ │ │ ├── OperationQueue.cpp
│ │ │ │ ├── OperationQueue.hpp
│ │ │ │ ├── OperationQueueForMemory.cpp
│ │ │ │ └── OperationQueueForMemory.hpp
│ │ │ ├── sqlite/
│ │ │ │ ├── AbstractHandle.cpp
│ │ │ │ ├── AbstractHandle.hpp
│ │ │ │ ├── ColumnMeta.cpp
│ │ │ │ ├── ColumnMeta.hpp
│ │ │ │ ├── DecorativeHandle.cpp
│ │ │ │ ├── DecorativeHandle.hpp
│ │ │ │ ├── DecorativeHandleStatement.cpp
│ │ │ │ ├── DecorativeHandleStatement.hpp
│ │ │ │ ├── Global.cpp
│ │ │ │ ├── Global.hpp
│ │ │ │ ├── HandleNotification.cpp
│ │ │ │ ├── HandleNotification.hpp
│ │ │ │ ├── HandleOperator.cpp
│ │ │ │ ├── HandleOperator.hpp
│ │ │ │ ├── HandleRelated.cpp
│ │ │ │ ├── HandleRelated.hpp
│ │ │ │ ├── HandleStatement.cpp
│ │ │ │ ├── HandleStatement.hpp
│ │ │ │ ├── TableAttribute.cpp
│ │ │ │ └── TableAttribute.hpp
│ │ │ └── vacuum/
│ │ │ ├── VacuumHandleOperator.cpp
│ │ │ └── VacuumHandleOperator.hpp
│ │ ├── platform/
│ │ │ ├── CrossPlatform.c
│ │ │ ├── CrossPlatform.h
│ │ │ ├── SysTypes.h
│ │ │ ├── WCTFileManager.cpp
│ │ │ └── WCTOperationQueue.cpp
│ │ ├── repair/
│ │ │ ├── Info.plist
│ │ │ ├── RepairKit.h
│ │ │ ├── SQLiteRepairKit.modulemap
│ │ │ ├── basic/
│ │ │ │ ├── Assemble.cpp
│ │ │ │ ├── Assemble.hpp
│ │ │ │ ├── Cipher.cpp
│ │ │ │ ├── Cipher.hpp
│ │ │ │ ├── Crawlable.cpp
│ │ │ │ ├── Crawlable.hpp
│ │ │ │ ├── EncryptedSerialization.cpp
│ │ │ │ ├── EncryptedSerialization.hpp
│ │ │ │ ├── MasterItem.cpp
│ │ │ │ ├── MasterItem.hpp
│ │ │ │ ├── Repairman.cpp
│ │ │ │ ├── Repairman.hpp
│ │ │ │ ├── Scoreable.cpp
│ │ │ │ ├── Scoreable.hpp
│ │ │ │ ├── SequenceItem.cpp
│ │ │ │ ├── SequenceItem.hpp
│ │ │ │ ├── UpgradeableErrorProne.cpp
│ │ │ │ ├── UpgradeableErrorProne.hpp
│ │ │ │ ├── Vacuum.cpp
│ │ │ │ └── Vacuum.hpp
│ │ │ ├── crawl/
│ │ │ │ ├── FullCrawler.cpp
│ │ │ │ ├── FullCrawler.hpp
│ │ │ │ ├── MasterCrawler.cpp
│ │ │ │ ├── MasterCrawler.hpp
│ │ │ │ ├── SequenceCrawler.cpp
│ │ │ │ └── SequenceCrawler.hpp
│ │ │ ├── factory/
│ │ │ │ ├── Factory.cpp
│ │ │ │ ├── Factory.hpp
│ │ │ │ ├── FactoryBackup.cpp
│ │ │ │ ├── FactoryBackup.hpp
│ │ │ │ ├── FactoryDepositor.cpp
│ │ │ │ ├── FactoryDepositor.hpp
│ │ │ │ ├── FactoryRelated.cpp
│ │ │ │ ├── FactoryRelated.hpp
│ │ │ │ ├── FactoryRenewer.cpp
│ │ │ │ ├── FactoryRenewer.hpp
│ │ │ │ ├── FactoryRetriever.cpp
│ │ │ │ ├── FactoryRetriever.hpp
│ │ │ │ ├── FactoryVacuum.cpp
│ │ │ │ └── FactoryVacuum.hpp
│ │ │ ├── mechanic/
│ │ │ │ ├── Backup.cpp
│ │ │ │ ├── Backup.hpp
│ │ │ │ ├── BackupHandleOperator.cpp
│ │ │ │ ├── BackupHandleOperator.hpp
│ │ │ │ ├── IncrementalMaterial.cpp
│ │ │ │ ├── IncrementalMaterial.hpp
│ │ │ │ ├── Material.cpp
│ │ │ │ ├── Material.hpp
│ │ │ │ ├── Mechanic.cpp
│ │ │ │ └── Mechanic.hpp
│ │ │ ├── parse/
│ │ │ │ ├── Cell.cpp
│ │ │ │ ├── Cell.hpp
│ │ │ │ ├── Frame.cpp
│ │ │ │ ├── Frame.hpp
│ │ │ │ ├── Initializeable.cpp
│ │ │ │ ├── Initializeable.hpp
│ │ │ │ ├── Page.cpp
│ │ │ │ ├── Page.hpp
│ │ │ │ ├── PageBasedFileHandle.cpp
│ │ │ │ ├── PageBasedFileHandle.hpp
│ │ │ │ ├── Pager.cpp
│ │ │ │ ├── Pager.hpp
│ │ │ │ ├── PagerRelated.cpp
│ │ │ │ ├── PagerRelated.hpp
│ │ │ │ ├── Shm.cpp
│ │ │ │ ├── Shm.hpp
│ │ │ │ ├── Wal.cpp
│ │ │ │ ├── Wal.hpp
│ │ │ │ ├── WalRelated.cpp
│ │ │ │ └── WalRelated.hpp
│ │ │ ├── sqlite/
│ │ │ │ ├── SQLiteAssembler.cpp
│ │ │ │ ├── SQLiteAssembler.hpp
│ │ │ │ ├── SQLiteBase.cpp
│ │ │ │ ├── SQLiteBase.hpp
│ │ │ │ ├── SQLiteLocker.cpp
│ │ │ │ └── SQLiteLocker.hpp
│ │ │ └── utility/
│ │ │ ├── Fraction.cpp
│ │ │ └── Fraction.hpp
│ │ ├── utility/
│ │ │ ├── AsyncQueue.cpp
│ │ │ ├── AsyncQueue.hpp
│ │ │ ├── CaseInsensitiveList.hpp
│ │ │ ├── Enum.hpp
│ │ │ ├── Exiting.cpp
│ │ │ ├── Exiting.hpp
│ │ │ ├── Macro.h
│ │ │ ├── Shadow.hpp
│ │ │ ├── TimedQueue.hpp
│ │ │ ├── UniqueList.hpp
│ │ │ └── WCDBVersion.h
│ │ └── winq/
│ │ ├── SQL.cpp
│ │ ├── SQL.hpp
│ │ ├── Statement.cpp
│ │ ├── Statement.hpp
│ │ ├── WINQ.h
│ │ ├── extension/
│ │ │ ├── AggregateFunction.cpp
│ │ │ ├── AggregateFunction.hpp
│ │ │ ├── BaseBinding.cpp
│ │ │ ├── BaseBinding.hpp
│ │ │ ├── ColumnType.cpp
│ │ │ ├── ColumnType.hpp
│ │ │ ├── Convertible.hpp
│ │ │ ├── ConvertibleImplementation.cpp
│ │ │ ├── ConvertibleImplementation.hpp
│ │ │ ├── CoreFunction.cpp
│ │ │ ├── CoreFunction.hpp
│ │ │ ├── ExpressionOperable.cpp
│ │ │ ├── ExpressionOperable.hpp
│ │ │ ├── FTSFunction.cpp
│ │ │ ├── FTSFunction.hpp
│ │ │ ├── SyntaxForwardDeclaration.h
│ │ │ ├── SyntaxList.hpp
│ │ │ ├── Value.cpp
│ │ │ ├── Value.hpp
│ │ │ └── ValueArray.hpp
│ │ ├── identifier/
│ │ │ ├── BindParameter.cpp
│ │ │ ├── BindParameter.hpp
│ │ │ ├── Column.cpp
│ │ │ ├── Column.hpp
│ │ │ ├── ColumnConstraint.cpp
│ │ │ ├── ColumnConstraint.hpp
│ │ │ ├── ColumnDef.cpp
│ │ │ ├── ColumnDef.hpp
│ │ │ ├── CommonTableExpression.cpp
│ │ │ ├── CommonTableExpression.hpp
│ │ │ ├── Expression.cpp
│ │ │ ├── Expression.hpp
│ │ │ ├── Filter.cpp
│ │ │ ├── Filter.hpp
│ │ │ ├── ForeignKey.cpp
│ │ │ ├── ForeignKey.hpp
│ │ │ ├── FrameSpec.cpp
│ │ │ ├── FrameSpec.hpp
│ │ │ ├── IndexedColumn.cpp
│ │ │ ├── IndexedColumn.hpp
│ │ │ ├── Join.cpp
│ │ │ ├── Join.hpp
│ │ │ ├── JoinConstraint.cpp
│ │ │ ├── JoinConstraint.hpp
│ │ │ ├── LiteralValue.cpp
│ │ │ ├── LiteralValue.hpp
│ │ │ ├── OrderingTerm.cpp
│ │ │ ├── OrderingTerm.hpp
│ │ │ ├── Pragma.cpp
│ │ │ ├── Pragma.hpp
│ │ │ ├── QualifiedTable.cpp
│ │ │ ├── QualifiedTable.hpp
│ │ │ ├── RaiseFunction.cpp
│ │ │ ├── RaiseFunction.hpp
│ │ │ ├── ResultColumn.cpp
│ │ │ ├── ResultColumn.hpp
│ │ │ ├── Schema.cpp
│ │ │ ├── Schema.hpp
│ │ │ ├── TableConstraint.cpp
│ │ │ ├── TableConstraint.hpp
│ │ │ ├── TableOrSubquery.cpp
│ │ │ ├── TableOrSubquery.hpp
│ │ │ ├── Upsert.cpp
│ │ │ ├── Upsert.hpp
│ │ │ ├── WindowDef.cpp
│ │ │ └── WindowDef.hpp
│ │ ├── statement/
│ │ │ ├── StatementAlterTable.cpp
│ │ │ ├── StatementAlterTable.hpp
│ │ │ ├── StatementAnalyze.cpp
│ │ │ ├── StatementAnalyze.hpp
│ │ │ ├── StatementAttach.cpp
│ │ │ ├── StatementAttach.hpp
│ │ │ ├── StatementBegin.cpp
│ │ │ ├── StatementBegin.hpp
│ │ │ ├── StatementCommit.cpp
│ │ │ ├── StatementCommit.hpp
│ │ │ ├── StatementCreateIndex.cpp
│ │ │ ├── StatementCreateIndex.hpp
│ │ │ ├── StatementCreateTable.cpp
│ │ │ ├── StatementCreateTable.hpp
│ │ │ ├── StatementCreateTrigger.cpp
│ │ │ ├── StatementCreateTrigger.hpp
│ │ │ ├── StatementCreateView.cpp
│ │ │ ├── StatementCreateView.hpp
│ │ │ ├── StatementCreateVirtualTable.cpp
│ │ │ ├── StatementCreateVirtualTable.hpp
│ │ │ ├── StatementDelete.cpp
│ │ │ ├── StatementDelete.hpp
│ │ │ ├── StatementDetach.cpp
│ │ │ ├── StatementDetach.hpp
│ │ │ ├── StatementDropIndex.cpp
│ │ │ ├── StatementDropIndex.hpp
│ │ │ ├── StatementDropTable.cpp
│ │ │ ├── StatementDropTable.hpp
│ │ │ ├── StatementDropTrigger.cpp
│ │ │ ├── StatementDropTrigger.hpp
│ │ │ ├── StatementDropView.cpp
│ │ │ ├── StatementDropView.hpp
│ │ │ ├── StatementExplain.cpp
│ │ │ ├── StatementExplain.hpp
│ │ │ ├── StatementInsert.cpp
│ │ │ ├── StatementInsert.hpp
│ │ │ ├── StatementPragma.cpp
│ │ │ ├── StatementPragma.hpp
│ │ │ ├── StatementReindex.cpp
│ │ │ ├── StatementReindex.hpp
│ │ │ ├── StatementRelease.cpp
│ │ │ ├── StatementRelease.hpp
│ │ │ ├── StatementRollback.cpp
│ │ │ ├── StatementRollback.hpp
│ │ │ ├── StatementSavepoint.cpp
│ │ │ ├── StatementSavepoint.hpp
│ │ │ ├── StatementSelect.cpp
│ │ │ ├── StatementSelect.hpp
│ │ │ ├── StatementUpdate.cpp
│ │ │ ├── StatementUpdate.hpp
│ │ │ ├── StatementVacuum.cpp
│ │ │ └── StatementVacuum.hpp
│ │ └── syntax/
│ │ ├── Syntax.h
│ │ ├── SyntaxAssertion.hpp
│ │ ├── SyntaxEnum.hpp
│ │ ├── const/
│ │ │ ├── SyntaxCommonConst.cpp
│ │ │ └── SyntaxCommonConst.hpp
│ │ ├── identifier/
│ │ │ ├── SyntaxBindParameter.cpp
│ │ │ ├── SyntaxBindParameter.hpp
│ │ │ ├── SyntaxColumn.cpp
│ │ │ ├── SyntaxColumn.hpp
│ │ │ ├── SyntaxColumnConstraint.cpp
│ │ │ ├── SyntaxColumnConstraint.hpp
│ │ │ ├── SyntaxColumnDef.cpp
│ │ │ ├── SyntaxColumnDef.hpp
│ │ │ ├── SyntaxCommonTableExpression.cpp
│ │ │ ├── SyntaxCommonTableExpression.hpp
│ │ │ ├── SyntaxExpression.cpp
│ │ │ ├── SyntaxExpression.hpp
│ │ │ ├── SyntaxFilter.cpp
│ │ │ ├── SyntaxFilter.hpp
│ │ │ ├── SyntaxForeignKeyClause.cpp
│ │ │ ├── SyntaxForeignKeyClause.hpp
│ │ │ ├── SyntaxFrameSpec.cpp
│ │ │ ├── SyntaxFrameSpec.hpp
│ │ │ ├── SyntaxIdentifier.cpp
│ │ │ ├── SyntaxIdentifier.hpp
│ │ │ ├── SyntaxIndexedColumn.cpp
│ │ │ ├── SyntaxIndexedColumn.hpp
│ │ │ ├── SyntaxJoinClause.cpp
│ │ │ ├── SyntaxJoinClause.hpp
│ │ │ ├── SyntaxJoinConstraint.cpp
│ │ │ ├── SyntaxJoinConstraint.hpp
│ │ │ ├── SyntaxLiteralValue.cpp
│ │ │ ├── SyntaxLiteralValue.hpp
│ │ │ ├── SyntaxOrderingTerm.cpp
│ │ │ ├── SyntaxOrderingTerm.hpp
│ │ │ ├── SyntaxPragma.cpp
│ │ │ ├── SyntaxPragma.hpp
│ │ │ ├── SyntaxQualifiedTableName.cpp
│ │ │ ├── SyntaxQualifiedTableName.hpp
│ │ │ ├── SyntaxRaiseFunction.cpp
│ │ │ ├── SyntaxRaiseFunction.hpp
│ │ │ ├── SyntaxResultColumn.cpp
│ │ │ ├── SyntaxResultColumn.hpp
│ │ │ ├── SyntaxSchema.cpp
│ │ │ ├── SyntaxSchema.hpp
│ │ │ ├── SyntaxSelectCore.cpp
│ │ │ ├── SyntaxSelectCore.hpp
│ │ │ ├── SyntaxTableConstraint.cpp
│ │ │ ├── SyntaxTableConstraint.hpp
│ │ │ ├── SyntaxTableOrSubquery.cpp
│ │ │ ├── SyntaxTableOrSubquery.hpp
│ │ │ ├── SyntaxUpsertClause.cpp
│ │ │ ├── SyntaxUpsertClause.hpp
│ │ │ ├── SyntaxWindowDef.cpp
│ │ │ └── SyntaxWindowDef.hpp
│ │ └── stmt/
│ │ ├── SyntaxAlterTableSTMT.cpp
│ │ ├── SyntaxAlterTableSTMT.hpp
│ │ ├── SyntaxAnalyzeSTMT.cpp
│ │ ├── SyntaxAnalyzeSTMT.hpp
│ │ ├── SyntaxAttachSTMT.cpp
│ │ ├── SyntaxAttachSTMT.hpp
│ │ ├── SyntaxBeginSTMT.cpp
│ │ ├── SyntaxBeginSTMT.hpp
│ │ ├── SyntaxCommitSTMT.cpp
│ │ ├── SyntaxCommitSTMT.hpp
│ │ ├── SyntaxCreateIndexSTMT.cpp
│ │ ├── SyntaxCreateIndexSTMT.hpp
│ │ ├── SyntaxCreateTableSTMT.cpp
│ │ ├── SyntaxCreateTableSTMT.hpp
│ │ ├── SyntaxCreateTriggerSTMT.cpp
│ │ ├── SyntaxCreateTriggerSTMT.hpp
│ │ ├── SyntaxCreateViewSTMT.cpp
│ │ ├── SyntaxCreateViewSTMT.hpp
│ │ ├── SyntaxCreateVirtualTableSTMT.cpp
│ │ ├── SyntaxCreateVirtualTableSTMT.hpp
│ │ ├── SyntaxDeleteSTMT.cpp
│ │ ├── SyntaxDeleteSTMT.hpp
│ │ ├── SyntaxDetachSTMT.cpp
│ │ ├── SyntaxDetachSTMT.hpp
│ │ ├── SyntaxDropIndexSTMT.cpp
│ │ ├── SyntaxDropIndexSTMT.hpp
│ │ ├── SyntaxDropTableSTMT.cpp
│ │ ├── SyntaxDropTableSTMT.hpp
│ │ ├── SyntaxDropTriggerSTMT.cpp
│ │ ├── SyntaxDropTriggerSTMT.hpp
│ │ ├── SyntaxDropViewSTMT.cpp
│ │ ├── SyntaxDropViewSTMT.hpp
│ │ ├── SyntaxExplainSTMT.cpp
│ │ ├── SyntaxExplainSTMT.hpp
│ │ ├── SyntaxInsertSTMT.cpp
│ │ ├── SyntaxInsertSTMT.hpp
│ │ ├── SyntaxPragmaSTMT.cpp
│ │ ├── SyntaxPragmaSTMT.hpp
│ │ ├── SyntaxReindexSTMT.cpp
│ │ ├── SyntaxReindexSTMT.hpp
│ │ ├── SyntaxReleaseSTMT.cpp
│ │ ├── SyntaxReleaseSTMT.hpp
│ │ ├── SyntaxRollbackSTMT.cpp
│ │ ├── SyntaxRollbackSTMT.hpp
│ │ ├── SyntaxSavepointSTMT.cpp
│ │ ├── SyntaxSavepointSTMT.hpp
│ │ ├── SyntaxSelectSTMT.cpp
│ │ ├── SyntaxSelectSTMT.hpp
│ │ ├── SyntaxUpdateSTMT.cpp
│ │ ├── SyntaxUpdateSTMT.hpp
│ │ ├── SyntaxVacuumSTMT.cpp
│ │ └── SyntaxVacuumSTMT.hpp
│ ├── cpp/
│ │ ├── Operation/
│ │ │ ├── BaseOperation.cpp
│ │ │ ├── BaseOperation.hpp
│ │ │ ├── HandleORMOperation.cpp
│ │ │ ├── HandleORMOperation.hpp
│ │ │ ├── HandleOperation.cpp
│ │ │ ├── HandleOperation.hpp
│ │ │ ├── StatementOperation.cpp
│ │ │ ├── StatementOperation.hpp
│ │ │ ├── TableORMOperation.hpp
│ │ │ ├── TableOperation.cpp
│ │ │ └── TableOperation.hpp
│ │ ├── WCDBCpp.h
│ │ ├── builtin/
│ │ │ ├── Builtin.h
│ │ │ ├── Master.cpp
│ │ │ ├── Master.hpp
│ │ │ ├── Sequence.cpp
│ │ │ └── Sequence.hpp
│ │ ├── chaincall/
│ │ │ ├── ChainCall.cpp
│ │ │ ├── ChainCall.hpp
│ │ │ ├── Delete.cpp
│ │ │ ├── Delete.hpp
│ │ │ ├── Insert.hpp
│ │ │ ├── MultiObject.cpp
│ │ │ ├── MultiObject.hpp
│ │ │ ├── MultiSelect.cpp
│ │ │ ├── MultiSelect.hpp
│ │ │ ├── Select.hpp
│ │ │ └── Update.hpp
│ │ ├── core/
│ │ │ ├── CPPDeclaration.h
│ │ │ ├── CppInterface.h
│ │ │ ├── Database.cpp
│ │ │ ├── Database.hpp
│ │ │ ├── Handle.cpp
│ │ │ ├── Handle.hpp
│ │ │ ├── PreparedStatement.cpp
│ │ │ ├── PreparedStatement.hpp
│ │ │ ├── Table.cpp
│ │ │ └── Table.hpp
│ │ ├── orm/
│ │ │ ├── CPPORM.h
│ │ │ ├── binding/
│ │ │ │ ├── Accessor.cpp
│ │ │ │ ├── Accessor.hpp
│ │ │ │ ├── Binding.cpp
│ │ │ │ ├── Binding.hpp
│ │ │ │ ├── Field.cpp
│ │ │ │ ├── Field.hpp
│ │ │ │ ├── ResultField.cpp
│ │ │ │ ├── ResultField.hpp
│ │ │ │ ├── RunTimeAccessor.hpp
│ │ │ │ ├── STDOptionalAccessor.hpp
│ │ │ │ ├── SharedPtrAccessor.hpp
│ │ │ │ └── WCDBOptionalAccessor.hpp
│ │ │ ├── fts/
│ │ │ │ ├── FTSTokenizerUtil.cpp
│ │ │ │ └── FTSTokenizerUtil.hpp
│ │ │ └── macro/
│ │ │ ├── CPPBindingMacro.h
│ │ │ ├── CPPColumnConstraintMacro.h
│ │ │ ├── CPPFieldMacro.h
│ │ │ ├── CPPIndexMacro.h
│ │ │ ├── CPPORMMacro.h
│ │ │ ├── CPPTableConstraintMacro.h
│ │ │ └── CPPVirtualTableMacro.h
│ │ └── tests/
│ │ ├── common/
│ │ │ ├── CPPBaseTestCase.h
│ │ │ ├── CPPBaseTestCase.mm
│ │ │ ├── CPPCRUDTestCase.h
│ │ │ ├── CPPCRUDTestCase.mm
│ │ │ ├── CPPDatabaseTestCase.h
│ │ │ ├── CPPDatabaseTestCase.mm
│ │ │ ├── CPPORMTestUtil.h
│ │ │ ├── CPPTableTestCase.h
│ │ │ ├── CPPTableTestCase.mm
│ │ │ ├── CPPTestCase.h
│ │ │ ├── CPPTestCaseAssertion.h
│ │ │ ├── CPPTestCaseObject.cpp
│ │ │ ├── CPPTestCaseObject.h
│ │ │ ├── Random+CPPTestObject.h
│ │ │ └── Random+CPPTestObject.mm
│ │ ├── fts/
│ │ │ ├── CPPFTS3Object.h
│ │ │ ├── CPPFTS3Object.mm
│ │ │ ├── CPPFTS3Tests.mm
│ │ │ ├── CPPFTS5Object.h
│ │ │ ├── CPPFTS5Object.mm
│ │ │ └── CPPFTS5Tests.mm
│ │ ├── interface/
│ │ │ ├── CPPConfigTests.mm
│ │ │ ├── CPPDatabaseTest.mm
│ │ │ ├── CPPFileTests.mm
│ │ │ ├── CPPHandleTest.mm
│ │ │ ├── CPPTableTest.mm
│ │ │ └── CPPTraceTest.mm
│ │ ├── operation/
│ │ │ ├── ChainCallTests.mm
│ │ │ ├── HandleOperationTests.mm
│ │ │ ├── ORMDeleteTests.mm
│ │ │ ├── ORMInsertTests.mm
│ │ │ ├── ORMMultiSelectTests.mm
│ │ │ ├── ORMSelectTests.mm
│ │ │ ├── ORMUpdateTests.mm
│ │ │ └── StatementOperationTests.mm
│ │ └── orm/
│ │ ├── CPPORMTests.mm
│ │ ├── alltypes/
│ │ │ ├── CPPAllTypesObject.h
│ │ │ ├── CPPAllTypesObject.mm
│ │ │ ├── CPPSTDOptionalAllTypesObject.h
│ │ │ ├── CPPSTDOptionalAllTypesObject.mm
│ │ │ ├── CPPSharedPtrAllTypesObject.h
│ │ │ ├── CPPSharedPtrAllTypesObject.mm
│ │ │ ├── CPPWCDBOptionalAllTypesObject.h
│ │ │ └── CPPWCDBOptionalAllTypesObject.mm
│ │ ├── column_constraint/
│ │ │ ├── CPPColumnConstraintAutoIncrement.cpp
│ │ │ ├── CPPColumnConstraintAutoIncrement.hpp
│ │ │ ├── CPPColumnConstraintAutoIncrementAsc.cpp
│ │ │ ├── CPPColumnConstraintAutoIncrementAsc.hpp
│ │ │ ├── CPPColumnConstraintDefault.cpp
│ │ │ ├── CPPColumnConstraintDefault.hpp
│ │ │ ├── CPPColumnConstraintEnablePrimaryAutoIncrement.cpp
│ │ │ ├── CPPColumnConstraintEnablePrimaryAutoIncrement.hpp
│ │ │ ├── CPPColumnConstraintPrimary.cpp
│ │ │ ├── CPPColumnConstraintPrimary.hpp
│ │ │ ├── CPPColumnConstraintPrimaryAsc.cpp
│ │ │ ├── CPPColumnConstraintPrimaryAsc.hpp
│ │ │ ├── CPPColumnConstraintPrimaryDesc.cpp
│ │ │ ├── CPPColumnConstraintPrimaryDesc.hpp
│ │ │ ├── CPPColumnConstraintUnique.cpp
│ │ │ └── CPPColumnConstraintUnique.hpp
│ │ ├── field/
│ │ │ ├── CPPFieldObject.h
│ │ │ └── CPPNewFieldObject.h
│ │ ├── index_object/
│ │ │ ├── CPPIndexObject.cpp
│ │ │ └── CPPIndexObject.hpp
│ │ ├── inherit/
│ │ │ ├── CPPInheritObject.cpp
│ │ │ └── CPPInheritObject.hpp
│ │ ├── rebind/
│ │ │ ├── CPPDropIndexObject.cpp
│ │ │ ├── CPPDropIndexObject.hpp
│ │ │ ├── CPPNewRemapObject.cpp
│ │ │ ├── CPPNewRemapObject.hpp
│ │ │ ├── CPPNewlyCreatedTableIndexObject.cpp
│ │ │ ├── CPPNewlyCreatedTableIndexObject.hpp
│ │ │ ├── CPPOldRemapObject.cpp
│ │ │ └── CPPOldRemapObject.hpp
│ │ ├── table_constraint/
│ │ │ ├── CPPTableConstraintObject.cpp
│ │ │ └── CPPTableConstraintObject.hpp
│ │ └── virtual_table/
│ │ ├── CPPVirtualTableFTS4Object.cpp
│ │ ├── CPPVirtualTableFTS4Object.hpp
│ │ ├── CPPVirtualTableFTS5Object.cpp
│ │ └── CPPVirtualTableFTS5Object.hpp
│ ├── java/
│ │ ├── .gitignore
│ │ ├── annotation/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ ├── FTSModule.java
│ │ │ ├── FTSVersion.java
│ │ │ ├── MultiIndexes.java
│ │ │ ├── MultiPrimary.java
│ │ │ ├── MultiUnique.java
│ │ │ ├── WCDBDefault.java
│ │ │ ├── WCDBField.java
│ │ │ ├── WCDBIndex.java
│ │ │ └── WCDBTableCoding.java
│ │ ├── build.gradle
│ │ ├── builder/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── compiler/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ ├── compiler/
│ │ │ │ │ │ ├── JavaAnnotationProcessor.java
│ │ │ │ │ │ ├── JavaCodeGenerator.java
│ │ │ │ │ │ ├── JavaFieldORMInfo.java
│ │ │ │ │ │ ├── KotlinAnnotationProcessor.kt
│ │ │ │ │ │ ├── KotlinCodeGenerator.kt
│ │ │ │ │ │ ├── KotlinPropertyORMInfo.kt
│ │ │ │ │ │ └── resolvedInfo/
│ │ │ │ │ │ ├── ColumnInfo.kt
│ │ │ │ │ │ ├── DefaultValueInfo.kt
│ │ │ │ │ │ ├── FTSModuleInfo.kt
│ │ │ │ │ │ ├── MultiIndexesInfo.kt
│ │ │ │ │ │ ├── MultiPrimaryInfo.kt
│ │ │ │ │ │ ├── MultiUniqueInfo.kt
│ │ │ │ │ │ ├── ResolveTool.kt
│ │ │ │ │ │ └── TableConfigInfo.kt
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── PreparedStatement.java
│ │ │ │ │ ├── fts/
│ │ │ │ │ │ └── BuiltinTokenizer.java
│ │ │ │ │ ├── orm/
│ │ │ │ │ │ ├── Binding.java
│ │ │ │ │ │ ├── Field.java
│ │ │ │ │ │ └── TableBinding.java
│ │ │ │ │ └── winq/
│ │ │ │ │ ├── Column.java
│ │ │ │ │ ├── ColumnConstraint.java
│ │ │ │ │ ├── ColumnDef.java
│ │ │ │ │ ├── ColumnType.java
│ │ │ │ │ ├── ConflictAction.java
│ │ │ │ │ ├── ExpressionOperable.java
│ │ │ │ │ ├── ForeignKey.java
│ │ │ │ │ ├── Identifier.java
│ │ │ │ │ ├── IndexedColumnConvertible.java
│ │ │ │ │ ├── Order.java
│ │ │ │ │ ├── Schema.java
│ │ │ │ │ ├── StatementCreateIndex.java
│ │ │ │ │ └── TableConstraint.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ ├── gradle/
│ │ │ │ │ └── incremental.annotation.processors
│ │ │ │ └── services/
│ │ │ │ ├── com.google.devtools.ksp.processing.SymbolProcessorProvider
│ │ │ │ └── javax.annotation.processing.Processor
│ │ │ ├── gradle-plugin/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ └── groovy/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdb/
│ │ │ │ └── gradle/
│ │ │ │ ├── WCDBOrmSourceDirectorySet.groovy
│ │ │ │ ├── WCDBOrmSourceDirectorySetG7.groovy
│ │ │ │ └── WCDBPlugin.groovy
│ │ │ └── settings.gradle
│ │ ├── compat/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ └── compat/
│ │ │ ├── DatabaseErrorHandler.java
│ │ │ ├── DatabaseUtils.java
│ │ │ ├── SQLiteCipherSpec.java
│ │ │ ├── SQLiteDatabase.java
│ │ │ ├── SQLiteStatement.java
│ │ │ └── ValueCursor.java
│ │ ├── gradle/
│ │ │ ├── WeChatPublish.gradle
│ │ │ └── wrapper/
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── kotlin-test/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdbtest/
│ │ │ │ ├── base/
│ │ │ │ │ ├── BaseTestCase.kt
│ │ │ │ │ ├── CRUDTestCase.kt
│ │ │ │ │ ├── DatabaseTestCase.kt
│ │ │ │ │ ├── ObjectCRUDTestCase.kt
│ │ │ │ │ ├── RandomTool.kt
│ │ │ │ │ ├── TableTestCase.kt
│ │ │ │ │ ├── TestObject.kt
│ │ │ │ │ └── WrappedValue.kt
│ │ │ │ ├── crud/
│ │ │ │ │ ├── ObjectDeleteTest.kt
│ │ │ │ │ ├── ObjectInsertTest.kt
│ │ │ │ │ ├── ObjectSelectTest.kt
│ │ │ │ │ └── ObjectUpdateTest.kt
│ │ │ │ └── orm/
│ │ │ │ ├── ORMTest.kt
│ │ │ │ └── testclass/
│ │ │ │ ├── AllTypeObject.kt
│ │ │ │ ├── AutoAddColumnObject.kt
│ │ │ │ ├── ColumnConstraintAutoIncrementObject.kt
│ │ │ │ ├── ColumnConstraintDefaultObject.kt
│ │ │ │ ├── ColumnConstraintDefaultZeroObject.kt
│ │ │ │ ├── ColumnConstraintNotNullObject.kt
│ │ │ │ ├── ColumnConstraintPrimaryObject.kt
│ │ │ │ ├── ColumnConstraintUniqueObject.kt
│ │ │ │ ├── DataIndexObject.kt
│ │ │ │ ├── FTS3TestObject.kt
│ │ │ │ ├── FTS5TestObject.kt
│ │ │ │ ├── FieldObject.kt
│ │ │ │ ├── IndexObject.kt
│ │ │ │ ├── NewRemapObject.kt
│ │ │ │ ├── OldRemapObject.kt
│ │ │ │ ├── PrimaryEnableAutoIncrementObject.kt
│ │ │ │ ├── PrimaryNotAutoIncrementObject.kt
│ │ │ │ └── TableConstraintObject.kt
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdbtest/
│ │ │ ├── MainActivity.kt
│ │ │ ├── RandomTool.kt
│ │ │ ├── TestObject.kt
│ │ │ └── WrappedValue.kt
│ │ ├── main/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── cpp/
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── JNIBinding.c
│ │ │ │ ├── base/
│ │ │ │ │ ├── ErrorJNI.c
│ │ │ │ │ ├── ErrorJNI.h
│ │ │ │ │ ├── WCDBExtendJNI.cpp
│ │ │ │ │ ├── WCDBJNI.c
│ │ │ │ │ └── WCDBJNI.h
│ │ │ │ ├── core/
│ │ │ │ │ ├── BindingJNI.c
│ │ │ │ │ ├── BindingJNI.h
│ │ │ │ │ ├── CoreJNI.c
│ │ │ │ │ ├── CoreJNI.h
│ │ │ │ │ ├── DatabaseExtendJNI.cpp
│ │ │ │ │ ├── DatabaseExtendJNI.h
│ │ │ │ │ ├── DatabaseJNI.c
│ │ │ │ │ ├── DatabaseJNI.h
│ │ │ │ │ ├── HandleJNI.c
│ │ │ │ │ ├── HandleJNI.h
│ │ │ │ │ ├── HandleStatementJNI.c
│ │ │ │ │ └── HandleStatementJNI.h
│ │ │ │ └── winq/
│ │ │ │ ├── Statement/
│ │ │ │ │ ├── StatementAlterTableJNI.c
│ │ │ │ │ ├── StatementAlterTableJNI.h
│ │ │ │ │ ├── StatementAnalyzeJNI.c
│ │ │ │ │ ├── StatementAnalyzeJNI.h
│ │ │ │ │ ├── StatementAttachJNI.c
│ │ │ │ │ ├── StatementAttachJNI.h
│ │ │ │ │ ├── StatementBeginJNI.c
│ │ │ │ │ ├── StatementBeginJNI.h
│ │ │ │ │ ├── StatementCommitJNI.c
│ │ │ │ │ ├── StatementCommitJNI.h
│ │ │ │ │ ├── StatementCreateTableJNI.c
│ │ │ │ │ ├── StatementCreateTableJNI.h
│ │ │ │ │ ├── StatementCreateTriggerJNI.c
│ │ │ │ │ ├── StatementCreateTriggerJNI.h
│ │ │ │ │ ├── StatementCreateViewJNI.c
│ │ │ │ │ ├── StatementCreateViewJNI.h
│ │ │ │ │ ├── StatementCreateVirtualTableJNI.c
│ │ │ │ │ ├── StatementCreateVirtualTableJNI.h
│ │ │ │ │ ├── StatementCreateindexJNI.c
│ │ │ │ │ ├── StatementCreateindexJNI.h
│ │ │ │ │ ├── StatementDeleteJNI.c
│ │ │ │ │ ├── StatementDeleteJNI.h
│ │ │ │ │ ├── StatementDetachJNI.c
│ │ │ │ │ ├── StatementDetachJNI.h
│ │ │ │ │ ├── StatementDropIndexJNI.c
│ │ │ │ │ ├── StatementDropIndexJNI.h
│ │ │ │ │ ├── StatementDropTableJNI.c
│ │ │ │ │ ├── StatementDropTableJNI.h
│ │ │ │ │ ├── StatementDropTriggerJNI.c
│ │ │ │ │ ├── StatementDropTriggerJNI.h
│ │ │ │ │ ├── StatementDropViewJNI.c
│ │ │ │ │ ├── StatementDropViewJNI.h
│ │ │ │ │ ├── StatementExplainJNI.c
│ │ │ │ │ ├── StatementExplainJNI.h
│ │ │ │ │ ├── StatementInsertJNI.c
│ │ │ │ │ ├── StatementInsertJNI.h
│ │ │ │ │ ├── StatementPragmaJNI.c
│ │ │ │ │ ├── StatementPragmaJNI.h
│ │ │ │ │ ├── StatementReindexJNI.c
│ │ │ │ │ ├── StatementReindexJNI.h
│ │ │ │ │ ├── StatementReleaseJNI.c
│ │ │ │ │ ├── StatementReleaseJNI.h
│ │ │ │ │ ├── StatementRollbackJNI.c
│ │ │ │ │ ├── StatementRollbackJNI.h
│ │ │ │ │ ├── StatementSelectJNI.c
│ │ │ │ │ ├── StatementSelectJNI.h
│ │ │ │ │ ├── StatementUpdateJNI.c
│ │ │ │ │ ├── StatementUpdateJNI.h
│ │ │ │ │ ├── StatementVacuumJNI.c
│ │ │ │ │ └── StatementVacuumJNI.h
│ │ │ │ ├── WinqJNI.c
│ │ │ │ ├── WinqJNI.h
│ │ │ │ └── identifier/
│ │ │ │ ├── BindParameterJNI.c
│ │ │ │ ├── BindParameterJNI.h
│ │ │ │ ├── ColumnConstraintJNI.c
│ │ │ │ ├── ColumnConstraintJNI.h
│ │ │ │ ├── ColumnDefJNI.c
│ │ │ │ ├── ColumnDefJNI.h
│ │ │ │ ├── ColumnJNI.c
│ │ │ │ ├── ColumnJNI.h
│ │ │ │ ├── CommonTableExpressionJNI.c
│ │ │ │ ├── CommonTableExpressionJNI.h
│ │ │ │ ├── ExpressionJNI.c
│ │ │ │ ├── ExpressionJNI.h
│ │ │ │ ├── ExpressionOperableJNI.c
│ │ │ │ ├── ExpressionOperableJNI.h
│ │ │ │ ├── ForeignKeyJNI.c
│ │ │ │ ├── ForeignKeyJNI.h
│ │ │ │ ├── FrameSpecJNI.c
│ │ │ │ ├── FrameSpecJNI.h
│ │ │ │ ├── IndexedColumnJNI.c
│ │ │ │ ├── IndexedColumnJNI.h
│ │ │ │ ├── JoinJNI.c
│ │ │ │ ├── JoinJNI.h
│ │ │ │ ├── LiteralValueJNI.c
│ │ │ │ ├── LiteralValueJNI.h
│ │ │ │ ├── OrderingTermJNI.c
│ │ │ │ ├── OrderingTermJNI.h
│ │ │ │ ├── PragmaJNI.c
│ │ │ │ ├── PragmaJNI.h
│ │ │ │ ├── QualifiedTableJNI.c
│ │ │ │ ├── QualifiedTableJNI.h
│ │ │ │ ├── RaiseFunctionJNI.c
│ │ │ │ ├── RaiseFunctionJNI.h
│ │ │ │ ├── ResultColumnJNI.c
│ │ │ │ ├── ResultColumnJNI.h
│ │ │ │ ├── SchemaJNI.c
│ │ │ │ ├── SchemaJNI.h
│ │ │ │ ├── TableConstraintJNI.c
│ │ │ │ ├── TableConstraintJNI.h
│ │ │ │ ├── TableOrSubqueryJNI.c
│ │ │ │ ├── TableOrSubqueryJNI.h
│ │ │ │ ├── UpsertJNI.c
│ │ │ │ ├── UpsertJNI.h
│ │ │ │ ├── WindowDefJNI.c
│ │ │ │ └── WindowDefJNI.h
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ ├── base/
│ │ │ │ ├── CppObject.java
│ │ │ │ ├── CppObjectConvertible.java
│ │ │ │ ├── Value.java
│ │ │ │ ├── WCDBCorruptOrIOException.java
│ │ │ │ ├── WCDBException.java
│ │ │ │ ├── WCDBInterruptException.java
│ │ │ │ └── WCDBNormalException.java
│ │ │ ├── chaincall/
│ │ │ │ ├── ChainCall.java
│ │ │ │ ├── Delete.java
│ │ │ │ ├── Insert.java
│ │ │ │ ├── Select.java
│ │ │ │ └── Update.java
│ │ │ ├── core/
│ │ │ │ ├── Database.java
│ │ │ │ ├── Handle.java
│ │ │ │ ├── HandleORMOperation.java
│ │ │ │ ├── HandleOperation.java
│ │ │ │ ├── PausableTransaction.java
│ │ │ │ ├── PreparedStatement.java
│ │ │ │ ├── Table.java
│ │ │ │ ├── TableORMOperation.java
│ │ │ │ ├── TableOperation.java
│ │ │ │ └── Transaction.java
│ │ │ ├── fts/
│ │ │ │ ├── BuiltinFTSAuxiliaryFunction.java
│ │ │ │ └── BuiltinTokenizer.java
│ │ │ ├── orm/
│ │ │ │ ├── Binding.java
│ │ │ │ ├── Field.java
│ │ │ │ └── TableBinding.java
│ │ │ └── winq/
│ │ │ ├── BindParameter.java
│ │ │ ├── Column.java
│ │ │ ├── ColumnConstraint.java
│ │ │ ├── ColumnDef.java
│ │ │ ├── ColumnType.java
│ │ │ ├── CommonTableExpression.java
│ │ │ ├── ConflictAction.java
│ │ │ ├── Expression.java
│ │ │ ├── ExpressionConvertible.java
│ │ │ ├── ExpressionOperable.java
│ │ │ ├── ForeignKey.java
│ │ │ ├── FrameSpec.java
│ │ │ ├── Identifier.java
│ │ │ ├── IdentifierConvertible.java
│ │ │ ├── IndexedColumn.java
│ │ │ ├── IndexedColumnConvertible.java
│ │ │ ├── Join.java
│ │ │ ├── LiteralValue.java
│ │ │ ├── MultiTypeArray.java
│ │ │ ├── Order.java
│ │ │ ├── OrderingTerm.java
│ │ │ ├── Pragma.java
│ │ │ ├── QualifiedTable.java
│ │ │ ├── RaiseFunction.java
│ │ │ ├── ResultColumn.java
│ │ │ ├── ResultColumnConvertible.java
│ │ │ ├── Schema.java
│ │ │ ├── Statement.java
│ │ │ ├── StatementAlterTable.java
│ │ │ ├── StatementAnalyze.java
│ │ │ ├── StatementAttach.java
│ │ │ ├── StatementBegin.java
│ │ │ ├── StatementCommit.java
│ │ │ ├── StatementCreateIndex.java
│ │ │ ├── StatementCreateTable.java
│ │ │ ├── StatementCreateTrigger.java
│ │ │ ├── StatementCreateView.java
│ │ │ ├── StatementCreateVirtualTable.java
│ │ │ ├── StatementDelete.java
│ │ │ ├── StatementDetach.java
│ │ │ ├── StatementDropIndex.java
│ │ │ ├── StatementDropTable.java
│ │ │ ├── StatementDropTrigger.java
│ │ │ ├── StatementDropView.java
│ │ │ ├── StatementExplain.java
│ │ │ ├── StatementInsert.java
│ │ │ ├── StatementPragma.java
│ │ │ ├── StatementReindex.java
│ │ │ ├── StatementRelease.java
│ │ │ ├── StatementRollback.java
│ │ │ ├── StatementSelect.java
│ │ │ ├── StatementUpdate.java
│ │ │ ├── StatementVacuum.java
│ │ │ ├── TableConstraint.java
│ │ │ ├── TableOrSubquery.java
│ │ │ ├── TableOrSubqueryConvertible.java
│ │ │ ├── Upsert.java
│ │ │ └── WindowDef.java
│ │ ├── settings.gradle
│ │ └── test/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdbtest/
│ │ │ ├── base/
│ │ │ │ ├── BaseTestCase.java
│ │ │ │ ├── CRUDTestCase.java
│ │ │ │ ├── DatabaseTestCase.java
│ │ │ │ ├── FileTool.java
│ │ │ │ ├── ObjectCRUDTestCase.java
│ │ │ │ ├── RandomTool.java
│ │ │ │ ├── TableTestCase.java
│ │ │ │ ├── TestObject.java
│ │ │ │ ├── ValueCRUDTestCase.java
│ │ │ │ ├── WinqTool.java
│ │ │ │ └── WrappedValue.java
│ │ │ ├── crud/
│ │ │ │ ├── ChainCallTest.java
│ │ │ │ ├── FTSTest.java
│ │ │ │ ├── ObjectDeleteTest.java
│ │ │ │ ├── ObjectInsertTest.java
│ │ │ │ ├── ObjectSelectTest.java
│ │ │ │ ├── ObjectUpdateTest.java
│ │ │ │ ├── PrepareNewStatementTest.java
│ │ │ │ ├── StatementOperationTest.java
│ │ │ │ ├── ValueDeleteWithColumnTest.java
│ │ │ │ ├── ValueDeleteWithFieldTest.java
│ │ │ │ ├── ValueInsertWithColumnTest.java
│ │ │ │ ├── ValueInsertWithFieldTest.java
│ │ │ │ ├── ValueSelectWithColumnTest.java
│ │ │ │ ├── ValueSelectWithFieldTest.java
│ │ │ │ ├── ValueUpdateWithColumnTest.java
│ │ │ │ └── ValueUpdateWithFieldTest.java
│ │ │ ├── database/
│ │ │ │ ├── CompressionTest.java
│ │ │ │ ├── ConfigTest.java
│ │ │ │ ├── DatabaseTest.java
│ │ │ │ ├── FileTest.java
│ │ │ │ ├── HandleTest.java
│ │ │ │ ├── MigrationTest.java
│ │ │ │ ├── RepairTest.java
│ │ │ │ └── TraceTest.java
│ │ │ ├── orm/
│ │ │ │ ├── ORMTest.java
│ │ │ │ └── testclass/
│ │ │ │ └── AllTypeObjectHelper.java
│ │ │ ├── sample/
│ │ │ │ └── SimpleSample.java
│ │ │ └── winq/
│ │ │ ├── BindParameterTest.java
│ │ │ ├── ColumnConstraintTest.java
│ │ │ ├── ColumnDefTest.java
│ │ │ ├── ColumnTest.java
│ │ │ ├── CommonTableExpressionTest.java
│ │ │ ├── ExpressionTest.java
│ │ │ ├── ForeignKeyTest.java
│ │ │ ├── FrameSpecTest.java
│ │ │ ├── IndexedColumnTest.java
│ │ │ ├── JoinTest.java
│ │ │ ├── LiteralValueTest.java
│ │ │ ├── OrderingTermTest.java
│ │ │ ├── PragmaTest.java
│ │ │ ├── QualifiedTableTest.java
│ │ │ ├── RaiseFunctionTest.java
│ │ │ ├── ResultColumnTest.java
│ │ │ ├── SchemaTest.java
│ │ │ ├── StatementAlterTableTest.java
│ │ │ ├── StatementAnalyzeTest.java
│ │ │ ├── StatementAttachTest.java
│ │ │ ├── StatementBeginTest.java
│ │ │ ├── StatementCommitTest.java
│ │ │ ├── StatementCreateIndexTest.java
│ │ │ ├── StatementCreateTableTest.java
│ │ │ ├── StatementCreateTriggerTest.java
│ │ │ ├── StatementCreateViewTest.java
│ │ │ ├── StatementCreateVirtualTableTest.java
│ │ │ ├── StatementDeleteTest.java
│ │ │ ├── StatementDetachTest.java
│ │ │ ├── StatementDropIndexTest.java
│ │ │ ├── StatementDropTableTest.java
│ │ │ ├── StatementDropTriggerTest.java
│ │ │ ├── StatementDropViewTest.java
│ │ │ ├── StatementExplainTest.java
│ │ │ ├── StatementInsertTest.java
│ │ │ ├── StatementPragmaTest.java
│ │ │ ├── StatementReindexTest.java
│ │ │ ├── StatementReleaseTest.java
│ │ │ ├── StatementRollbackTest.java
│ │ │ ├── StatementSelectTest.java
│ │ │ ├── StatementUpdateTest.java
│ │ │ ├── StatementVacuumTest.java
│ │ │ ├── TableConstraintTest.java
│ │ │ ├── TableOrSubqueryTest.java
│ │ │ ├── UpsertTest.java
│ │ │ └── WindowDefTest.java
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ └── wcdbOrm/
│ │ └── com/
│ │ └── tencent/
│ │ └── wcdbtest/
│ │ ├── base/
│ │ │ ├── PinyinObject.java
│ │ │ ├── TestObject.java
│ │ │ └── TraditionalChineseObject.java
│ │ └── orm/
│ │ └── testclass/
│ │ ├── AllTypeObject.java
│ │ ├── AutoAddColumnObject.java
│ │ ├── ColumnConstraintAutoIncrementObject.java
│ │ ├── ColumnConstraintDefaultObject.java
│ │ ├── ColumnConstraintDefaultZeroObject.java
│ │ ├── ColumnConstraintNotNullObject.java
│ │ ├── ColumnConstraintPrimaryObject.java
│ │ ├── ColumnConstraintUniqueObject.java
│ │ ├── FTS3TestObject.java
│ │ ├── FTS5TestObject.java
│ │ ├── FieldObject.java
│ │ ├── IndexObject.java
│ │ ├── MMICUTestObject.java
│ │ ├── NewRemapObject.java
│ │ ├── OldRemapObject.java
│ │ ├── PrimaryEnableAutoIncrementObject.java
│ │ ├── PrimaryNotAutoIncrementObject.java
│ │ └── TableConstraintObject.java
│ ├── objc/
│ │ ├── Interface.h
│ │ ├── WCDBObjc.h
│ │ ├── bridge/
│ │ │ ├── WCTBridgeProperty+CPP.h
│ │ │ ├── WCTBridgeProperty.h
│ │ │ └── WCTBridgeProperty.mm
│ │ ├── builtin/
│ │ │ ├── NSData+WCTColumnCoding.h
│ │ │ ├── NSData+WCTColumnCoding.mm
│ │ │ ├── NSDate+WCTColumnCoding.h
│ │ │ ├── NSDate+WCTColumnCoding.mm
│ │ │ ├── NSNull+WCTColumnCoding.h
│ │ │ ├── NSNull+WCTColumnCoding.mm
│ │ │ ├── NSNumber+WCTColumnCoding.h
│ │ │ ├── NSNumber+WCTColumnCoding.mm
│ │ │ ├── NSObject+WCTColumnCoding.h
│ │ │ ├── NSObject+WCTColumnCoding.mm
│ │ │ ├── NSString+WCTColumnCoding.h
│ │ │ ├── NSString+WCTColumnCoding.mm
│ │ │ ├── WCTBuiltin.h
│ │ │ ├── WCTMaster+WCTTableCoding.h
│ │ │ ├── WCTMaster.h
│ │ │ ├── WCTMaster.mm
│ │ │ ├── WCTSequence+WCTTableCoding.h
│ │ │ ├── WCTSequence.h
│ │ │ └── WCTSequence.mm
│ │ ├── chaincall/
│ │ │ ├── WCTChainCall+Private.h
│ │ │ ├── WCTChainCall.h
│ │ │ ├── WCTChainCall.mm
│ │ │ ├── WCTDatabase+ChainCall.h
│ │ │ ├── WCTDatabase+ChainCall.mm
│ │ │ ├── WCTDelete.h
│ │ │ ├── WCTDelete.mm
│ │ │ ├── WCTHandle+ChainCall.h
│ │ │ ├── WCTHandle+ChainCall.mm
│ │ │ ├── WCTInsert.h
│ │ │ ├── WCTInsert.mm
│ │ │ ├── WCTMultiSelect.h
│ │ │ ├── WCTMultiSelect.mm
│ │ │ ├── WCTSelect.h
│ │ │ ├── WCTSelect.mm
│ │ │ ├── WCTSelectable+Private.h
│ │ │ ├── WCTSelectable.h
│ │ │ ├── WCTSelectable.mm
│ │ │ ├── WCTTable+ChainCall.h
│ │ │ ├── WCTTable+ChainCall.mm
│ │ │ ├── WCTTryDisposeGuard.h
│ │ │ ├── WCTTryDisposeGuard.mm
│ │ │ ├── WCTUpdate.h
│ │ │ └── WCTUpdate.mm
│ │ ├── compression/
│ │ │ ├── WCTCompressionInfo+Private.h
│ │ │ ├── WCTCompressionInfo.h
│ │ │ ├── WCTCompressionInfo.mm
│ │ │ ├── WCTDatabase+Compression.h
│ │ │ └── WCTDatabase+Compression.mm
│ │ ├── convenient/
│ │ │ ├── WCTConvenient.h
│ │ │ ├── WCTDatabase+Convenient.h
│ │ │ ├── WCTDatabase+Convenient.mm
│ │ │ ├── WCTHandle+Convenient.h
│ │ │ ├── WCTHandle+Convenient.mm
│ │ │ ├── WCTTable+Convenient.h
│ │ │ └── WCTTable+Convenient.mm
│ │ ├── core/
│ │ │ ├── WCTCommon.h
│ │ │ ├── WCTConvertible.h
│ │ │ ├── WCTConvertible.mm
│ │ │ ├── WCTDatabase+Test.h
│ │ │ ├── WCTDatabase+Test.mm
│ │ │ ├── WCTDatabase+Version.h
│ │ │ ├── WCTDatabase+Version.mm
│ │ │ ├── WCTDeclaration.h
│ │ │ ├── WCTFTSTokenizerUtil.h
│ │ │ ├── WCTFTSTokenizerUtil.mm
│ │ │ ├── WCTFileManager.mm
│ │ │ ├── WCTFoundation.h
│ │ │ ├── WCTFoundation.mm
│ │ │ ├── WCTOperationQueue.mm
│ │ │ ├── WCTOptional.h
│ │ │ ├── WCTOptional.mm
│ │ │ ├── WCTTag.h
│ │ │ ├── WCTValue.h
│ │ │ └── WCTValue.mm
│ │ ├── database/
│ │ │ ├── WCTDatabase+Config.h
│ │ │ ├── WCTDatabase+Config.mm
│ │ │ ├── WCTDatabase+File.h
│ │ │ ├── WCTDatabase+File.mm
│ │ │ ├── WCTDatabase+Memory.h
│ │ │ ├── WCTDatabase+Memory.mm
│ │ │ ├── WCTDatabase+Private.h
│ │ │ ├── WCTDatabase+Repair.h
│ │ │ ├── WCTDatabase+Repair.mm
│ │ │ ├── WCTDatabase.h
│ │ │ └── WCTDatabase.mm
│ │ ├── fts/
│ │ │ ├── WCTDatabase+FTS.h
│ │ │ └── WCTDatabase+FTS.mm
│ │ ├── handle/
│ │ │ ├── WCTCancellationSignal+Private.h
│ │ │ ├── WCTCancellationSignal.h
│ │ │ ├── WCTCancellationSignal.mm
│ │ │ ├── WCTDatabase+Handle.h
│ │ │ ├── WCTDatabase+Handle.mm
│ │ │ ├── WCTHandle+Private.h
│ │ │ ├── WCTHandle.h
│ │ │ └── WCTHandle.mm
│ │ ├── migration/
│ │ │ ├── WCTDatabase+Migration.h
│ │ │ ├── WCTDatabase+Migration.mm
│ │ │ ├── WCTMigrationInfo+Private.h
│ │ │ ├── WCTMigrationInfo.h
│ │ │ └── WCTMigrationInfo.mm
│ │ ├── monitor/
│ │ │ ├── WCTDatabase+Monitor.h
│ │ │ ├── WCTDatabase+Monitor.mm
│ │ │ ├── WCTError+Private.h
│ │ │ ├── WCTError.h
│ │ │ ├── WCTError.mm
│ │ │ ├── WCTPerformanceInfo+Private.h
│ │ │ ├── WCTPerformanceInfo.h
│ │ │ └── WCTPerformanceInfo.mm
│ │ ├── orm/
│ │ │ ├── WCTORM.h
│ │ │ ├── accessor/
│ │ │ │ ├── WCTBaseAccessor.h
│ │ │ │ ├── WCTBaseAccessor.mm
│ │ │ │ ├── WCTCppAccessor.h
│ │ │ │ ├── WCTObjCAccessor.h
│ │ │ │ ├── WCTObjCAccessor.mm
│ │ │ │ ├── WCTRuntimeBaseAccessor.h
│ │ │ │ ├── WCTRuntimeBaseAccessor.mm
│ │ │ │ ├── WCTRuntimeCppAccessor.h
│ │ │ │ ├── WCTRuntimeObjCAccessor.h
│ │ │ │ └── WCTRuntimeObjCAccessor.mm
│ │ │ ├── binding/
│ │ │ │ ├── WCTBinding.h
│ │ │ │ ├── WCTBinding.mm
│ │ │ │ ├── WCTColumnBinding.h
│ │ │ │ └── WCTColumnBinding.mm
│ │ │ ├── coding/
│ │ │ │ ├── WCTColumnCoding.h
│ │ │ │ ├── WCTProperty.h
│ │ │ │ ├── WCTProperty.mm
│ │ │ │ ├── WCTResultColumn.h
│ │ │ │ ├── WCTResultColumn.mm
│ │ │ │ └── WCTTableCoding.h
│ │ │ └── macro/
│ │ │ ├── WCTColumnConstraintMacro.h
│ │ │ ├── WCTIndexMacro.h
│ │ │ ├── WCTMacro.h
│ │ │ ├── WCTMacroUtility.h
│ │ │ ├── WCTPropertyMacro.h
│ │ │ ├── WCTTableConstraintMacro.h
│ │ │ └── WCTVirtualTableMacro.h
│ │ ├── statement/
│ │ │ ├── WCTPreparedStatement+Private.h
│ │ │ ├── WCTPreparedStatement.h
│ │ │ └── WCTPreparedStatement.mm
│ │ ├── table/
│ │ │ ├── WCTDatabase+Table.h
│ │ │ ├── WCTDatabase+Table.mm
│ │ │ ├── WCTHandle+Table.h
│ │ │ ├── WCTHandle+Table.mm
│ │ │ ├── WCTTable+Private.h
│ │ │ ├── WCTTable+Table.h
│ │ │ ├── WCTTable+Table.mm
│ │ │ ├── WCTTable.h
│ │ │ ├── WCTTable.mm
│ │ │ └── WCTTableProtocol.h
│ │ ├── tests/
│ │ │ ├── advance/
│ │ │ │ ├── chaincall/
│ │ │ │ │ ├── ChainCallTests.mm
│ │ │ │ │ └── MultiSelectTests.mm
│ │ │ │ ├── column_coding/
│ │ │ │ │ ├── ColumnCodingObject+WCTTableCoding.h
│ │ │ │ │ ├── ColumnCodingObject.h
│ │ │ │ │ ├── ColumnCodingObject.mm
│ │ │ │ │ ├── ColumnCodingTests.mm
│ │ │ │ │ ├── DataCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── DataCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── DataCodingObject.h
│ │ │ │ │ ├── DataCodingObject.m
│ │ │ │ │ ├── DoubleCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── DoubleCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── DoubleCodingObject.h
│ │ │ │ │ ├── DoubleCodingObject.m
│ │ │ │ │ ├── IntegerCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── IntegerCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── IntegerCodingObject.h
│ │ │ │ │ ├── IntegerCodingObject.m
│ │ │ │ │ ├── Random+ColumnCodingObject.h
│ │ │ │ │ ├── Random+ColumnCodingObject.mm
│ │ │ │ │ ├── StringCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── StringCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── StringCodingObject.h
│ │ │ │ │ └── StringCodingObject.m
│ │ │ │ └── handle/
│ │ │ │ └── HandleTests.mm
│ │ │ ├── basic/
│ │ │ │ ├── FileTests.mm
│ │ │ │ ├── ObservationTests.mm
│ │ │ │ └── TableTests.mm
│ │ │ ├── benchmark/
│ │ │ │ ├── BaselineBenchmark.mm
│ │ │ │ ├── CipherBenchmark.mm
│ │ │ │ ├── CompressionBenchmark.h
│ │ │ │ ├── CompressionBenchmark.mm
│ │ │ │ ├── DatabaseMigrationBenchmark.mm
│ │ │ │ ├── DictCompressionBenchmark.mm
│ │ │ │ ├── MigrationBenchmark.h
│ │ │ │ ├── MigrationBenchmark.mm
│ │ │ │ ├── NormalCompressionBenchmark.mm
│ │ │ │ ├── ObjectsBasedBenchmark.h
│ │ │ │ ├── ObjectsBasedBenchmark.mm
│ │ │ │ ├── RetrieveBenchmark.mm
│ │ │ │ ├── TableBenchmark.mm
│ │ │ │ ├── TableMigrationBenchmark.mm
│ │ │ │ └── VacuumBenchmark.mm
│ │ │ ├── common/
│ │ │ │ ├── BaseTestCase.h
│ │ │ │ ├── BaseTestCase.mm
│ │ │ │ ├── Benchmark.h
│ │ │ │ ├── Benchmark.mm
│ │ │ │ ├── CRUDTestCase.h
│ │ │ │ ├── CRUDTestCase.mm
│ │ │ │ ├── DatabaseTestCase.h
│ │ │ │ ├── DatabaseTestCase.mm
│ │ │ │ ├── RobustyTestCase.h
│ │ │ │ ├── RobustyTestCase.mm
│ │ │ │ ├── TableTestCase.h
│ │ │ │ ├── TableTestCase.mm
│ │ │ │ ├── TestCase.h
│ │ │ │ ├── factory/
│ │ │ │ │ ├── ObjectsBasedFactory.h
│ │ │ │ │ ├── ObjectsBasedFactory.mm
│ │ │ │ │ ├── PrototypeFactory.h
│ │ │ │ │ ├── PrototypeFactory.mm
│ │ │ │ │ ├── SizeBasedFactory.h
│ │ │ │ │ ├── SizeBasedFactory.mm
│ │ │ │ │ ├── TablesBasedFactory.h
│ │ │ │ │ └── TablesBasedFactory.mm
│ │ │ │ ├── object/
│ │ │ │ │ ├── AllTypesObject+WCTTableCoding.h
│ │ │ │ │ ├── AllTypesObject.h
│ │ │ │ │ ├── AllTypesObject.mm
│ │ │ │ │ ├── TestCaseObject+WCTTableCoding.h
│ │ │ │ │ ├── TestCaseObject.h
│ │ │ │ │ └── TestCaseObject.mm
│ │ │ │ ├── random/
│ │ │ │ │ ├── Random+TestCaseObject.h
│ │ │ │ │ ├── Random+TestCaseObject.mm
│ │ │ │ │ ├── Random+WCDB.h
│ │ │ │ │ ├── Random+WCDB.mm
│ │ │ │ │ ├── Random.h
│ │ │ │ │ └── Random.mm
│ │ │ │ └── utility/
│ │ │ │ ├── Dispatch.h
│ │ │ │ ├── Dispatch.mm
│ │ │ │ ├── NSObject+TestCase.h
│ │ │ │ ├── NSObject+TestCase.mm
│ │ │ │ ├── Signpost.h
│ │ │ │ ├── Signpost.mm
│ │ │ │ ├── TestCaseAssertion.h
│ │ │ │ ├── TestCaseCounter.h
│ │ │ │ ├── TestCaseCounter.mm
│ │ │ │ ├── TestCaseLog.h
│ │ │ │ ├── TestCaseLog.mm
│ │ │ │ ├── TestCaseMacro.h
│ │ │ │ ├── TestCaseResult.h
│ │ │ │ ├── TestCaseResult.mm
│ │ │ │ ├── WCTDatabase+TestCase.h
│ │ │ │ └── WCTDatabase+TestCase.mm
│ │ │ ├── compression/
│ │ │ │ ├── common/
│ │ │ │ │ ├── CompressionTestCase.h
│ │ │ │ │ ├── CompressionTestCase.mm
│ │ │ │ │ ├── CompressionTestObject.h
│ │ │ │ │ ├── CompressionTestObject.mm
│ │ │ │ │ ├── Random+CompressionTestObject.h
│ │ │ │ │ └── Random+CompressionTestObject.mm
│ │ │ │ └── compatible/
│ │ │ │ ├── CompressRobustyTests.mm
│ │ │ │ ├── CompressingCRUDTest.mm
│ │ │ │ └── CompressionTests.mm
│ │ │ ├── config/
│ │ │ │ ├── ConfigTests.mm
│ │ │ │ └── DatabaseTests.mm
│ │ │ ├── convenient/
│ │ │ │ ├── ConvenientDeleteTests.mm
│ │ │ │ ├── ConvenientInsertTests.mm
│ │ │ │ ├── ConvenientSelectTests.mm
│ │ │ │ └── ConvenientUpdateTests.mm
│ │ │ ├── fts/
│ │ │ │ ├── FTS3Object+WCTTableCoding.h
│ │ │ │ ├── FTS3Object.h
│ │ │ │ ├── FTS3Object.mm
│ │ │ │ ├── FTS3Tests.mm
│ │ │ │ ├── FTS5Object.h
│ │ │ │ ├── FTS5Object.mm
│ │ │ │ └── FTS5Test.mm
│ │ │ ├── host/
│ │ │ │ ├── Info.plist
│ │ │ │ ├── host.xcconfig
│ │ │ │ └── main.m
│ │ │ ├── migration/
│ │ │ │ ├── common/
│ │ │ │ │ ├── MigrationCompatibleTestCase.mm
│ │ │ │ │ ├── MigrationObject.mm
│ │ │ │ │ ├── MigrationTestCase.h
│ │ │ │ │ ├── MigrationTestCase.mm
│ │ │ │ │ ├── MigrationTestObject.h
│ │ │ │ │ ├── MigrationTestObjectBase.h
│ │ │ │ │ ├── MigrationTestObjectBase.mm
│ │ │ │ │ ├── MigrationTestSourceObject.h
│ │ │ │ │ ├── Random+MigrationTestObject.h
│ │ │ │ │ └── Random+MigrationTestObject.mm
│ │ │ │ ├── compatible/
│ │ │ │ │ ├── CipherMigrationTests.mm
│ │ │ │ │ ├── MigrateTests.mm
│ │ │ │ │ └── MigratingCRUDTests.mm
│ │ │ │ ├── increment/
│ │ │ │ │ ├── AutoIncrementDatabaseMigratingCompatibleTests.mm
│ │ │ │ │ ├── AutoIncrementDatabaseMigrationCompatibleTests.mm
│ │ │ │ │ ├── AutoIncrementTableMigratingCompatibleTests.mm
│ │ │ │ │ └── AutoIncrementTableMigrationCompatibleTests.mm
│ │ │ │ ├── model/
│ │ │ │ │ ├── AutoIncrementMigrationObject.h
│ │ │ │ │ ├── AutoIncrementMigrationObject.mm
│ │ │ │ │ ├── AutoIncrementMigrationSourceObject.h
│ │ │ │ │ ├── AutoIncrementMigrationSourceObject.mm
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationObject.h
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationObject.mm
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationSourceObject.h
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationSourceObject.mm
│ │ │ │ │ ├── NormalMigrationObject.h
│ │ │ │ │ ├── NormalMigrationObject.mm
│ │ │ │ │ ├── NormalMigrationSourceObject.h
│ │ │ │ │ └── NormalMigrationSourceObject.mm
│ │ │ │ ├── normal/
│ │ │ │ │ ├── CipherDatabaseMigratingCompatibleTests.mm
│ │ │ │ │ └── CipherDatabaseMigrationCompatibleTests.mm
│ │ │ │ └── primary/
│ │ │ │ ├── PrimaryKeyDatabaseMigratingCompatibleTests.mm
│ │ │ │ ├── PrimaryKeyDatabaseMigrationCompatibleTests.mm
│ │ │ │ ├── PrimaryKeyTableMigratingCompatibleTests.mm
│ │ │ │ └── PrimaryKeyTableMigrationCompatibleTests.mm
│ │ │ ├── monitor/
│ │ │ │ ├── TraceTests.mm
│ │ │ │ └── VersionTests.mm
│ │ │ ├── orm/
│ │ │ │ ├── ORMTests.mm
│ │ │ │ ├── addtional/
│ │ │ │ │ ├── AdditionalORMObject+WCTTableCoding.h
│ │ │ │ │ ├── AdditionalORMObject.h
│ │ │ │ │ └── AdditionalORMObject.mm
│ │ │ │ ├── column_constraint/
│ │ │ │ │ ├── ColumnConstraintAutoIncrement+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrement.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrement.mm
│ │ │ │ │ ├── ColumnConstraintAutoIncrementAsc+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrementAsc.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrementAsc.mm
│ │ │ │ │ ├── ColumnConstraintCheck+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintCheck.h
│ │ │ │ │ ├── ColumnConstraintCheck.mm
│ │ │ │ │ ├── ColumnConstraintDefault+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintDefault.h
│ │ │ │ │ ├── ColumnConstraintDefault.mm
│ │ │ │ │ ├── ColumnConstraintEnablePrimaryAutoIncrement+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintEnablePrimaryAutoIncrement.h
│ │ │ │ │ ├── ColumnConstraintEnablePrimaryAutoIncrement.mm
│ │ │ │ │ ├── ColumnConstraintNotNull+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintNotNull.h
│ │ │ │ │ ├── ColumnConstraintNotNull.mm
│ │ │ │ │ ├── ColumnConstraintPrimary+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintPrimary.h
│ │ │ │ │ ├── ColumnConstraintPrimary.mm
│ │ │ │ │ ├── ColumnConstraintPrimaryAsc+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintPrimaryAsc.h
│ │ │ │ │ ├── ColumnConstraintPrimaryAsc.mm
│ │ │ │ │ ├── ColumnConstraintPrimaryDesc+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintPrimaryDesc.h
│ │ │ │ │ ├── ColumnConstraintPrimaryDesc.mm
│ │ │ │ │ ├── ColumnConstraintUnique+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintUnique.h
│ │ │ │ │ └── ColumnConstraintUnique.mm
│ │ │ │ ├── index/
│ │ │ │ │ ├── IndexObject+WCTTableCoding.h
│ │ │ │ │ ├── IndexObject.h
│ │ │ │ │ └── IndexObject.mm
│ │ │ │ ├── property/
│ │ │ │ │ ├── NewPropertyObject.h
│ │ │ │ │ ├── NewPropertyObject.mm
│ │ │ │ │ ├── PropertyObject+WCTTableCoding.h
│ │ │ │ │ ├── PropertyObject.h
│ │ │ │ │ └── PropertyObject.mm
│ │ │ │ ├── rebind/
│ │ │ │ │ ├── DropIndexObject+WCTTableCoding.h
│ │ │ │ │ ├── DropIndexObject.h
│ │ │ │ │ ├── DropIndexObject.mm
│ │ │ │ │ ├── NewRemapObject+WCTTableCoding.h
│ │ │ │ │ ├── NewRemapObject.h
│ │ │ │ │ ├── NewRemapObject.mm
│ │ │ │ │ ├── NewlyCreatedTableIndexObject+WCTTableCoding.h
│ │ │ │ │ ├── NewlyCreatedTableIndexObject.h
│ │ │ │ │ ├── NewlyCreatedTableIndexObject.mm
│ │ │ │ │ ├── OldRemapObject+WCTTableCoding.h
│ │ │ │ │ ├── OldRemapObject.h
│ │ │ │ │ └── OldRemapObject.mm
│ │ │ │ ├── table_constraint/
│ │ │ │ │ ├── TableConstraintObject+WCTTableCoding.h
│ │ │ │ │ ├── TableConstraintObject.h
│ │ │ │ │ └── TableConstraintObject.mm
│ │ │ │ └── virtual_table/
│ │ │ │ ├── VirtualTableFTS4Object+WCTTableCoding.h
│ │ │ │ ├── VirtualTableFTS4Object.h
│ │ │ │ ├── VirtualTableFTS4Object.mm
│ │ │ │ ├── VirtualTableFTS5Object+WCTTableCoding.h
│ │ │ │ ├── VirtualTableFTS5Object.h
│ │ │ │ └── VirtualTableFTS5Object.mm
│ │ │ ├── repair/
│ │ │ │ ├── BackupTests.mm
│ │ │ │ ├── DepositTests.mm
│ │ │ │ ├── RetrieveRobustyTests.mm
│ │ │ │ ├── RetrieveTests.mm
│ │ │ │ ├── VacuumRobustyTests.mm
│ │ │ │ ├── VacuumTests.mm
│ │ │ │ ├── common/
│ │ │ │ │ ├── BackupTestCase.h
│ │ │ │ │ ├── BackupTestCase.mm
│ │ │ │ │ ├── Random+RepairTestObject.h
│ │ │ │ │ ├── Random+RepairTestObject.mm
│ │ │ │ │ ├── RepairTestObject.h
│ │ │ │ │ ├── RepairTestObjectBase.h
│ │ │ │ │ └── RepairTestObjectBase.mm
│ │ │ │ └── model/
│ │ │ │ ├── AutoIncrementRepairTestObject.h
│ │ │ │ ├── AutoIncrementRepairTestObject.mm
│ │ │ │ ├── NormalRepairTestObject.h
│ │ │ │ ├── NormalRepairTestObject.mm
│ │ │ │ ├── WithoutRowidRepairTestObject.h
│ │ │ │ └── WithoutRowidRepairTestObject.mm
│ │ │ ├── thread/
│ │ │ │ ├── ThreadTests.mm
│ │ │ │ └── TransactionTests.mm
│ │ │ └── winq/
│ │ │ ├── AggregateFunctionTests.mm
│ │ │ ├── BindParameterTests.mm
│ │ │ ├── ColumnConstraintTests.mm
│ │ │ ├── ColumnDefTests.mm
│ │ │ ├── ColumnOperableTests.mm
│ │ │ ├── ColumnTests.mm
│ │ │ ├── ColumnTypeTests.mm
│ │ │ ├── CommonTableExpressionTests.mm
│ │ │ ├── ConflictTests.mm
│ │ │ ├── CoreFunctionTests.mm
│ │ │ ├── ExpressionOperableTests.mm
│ │ │ ├── ExpressionTests.mm
│ │ │ ├── FTSFunctionTests.mm
│ │ │ ├── FilterTests.mm
│ │ │ ├── ForeignKeyTests.mm
│ │ │ ├── FrameSpecTests.mm
│ │ │ ├── IndexedColumnTests.mm
│ │ │ ├── JoinConstraintTests.mm
│ │ │ ├── JoinTests.mm
│ │ │ ├── LiteralValueTests.mm
│ │ │ ├── OrderTests.mm
│ │ │ ├── OrderingTermTests.mm
│ │ │ ├── PragmaTests.mm
│ │ │ ├── QualifiedTableTests.mm
│ │ │ ├── RaiseFunctionTests.mm
│ │ │ ├── ResultColumnTests.mm
│ │ │ ├── SchemaTests.mm
│ │ │ ├── StatementAlterTableTests.mm
│ │ │ ├── StatementAnalyzeTests.mm
│ │ │ ├── StatementAttachTests.mm
│ │ │ ├── StatementBeginTests.mm
│ │ │ ├── StatementCommitTests.mm
│ │ │ ├── StatementCreateIndexTests.mm
│ │ │ ├── StatementCreateTableTests.mm
│ │ │ ├── StatementCreateTriggerTests.mm
│ │ │ ├── StatementCreateViewTests.mm
│ │ │ ├── StatementCreateVirtualTableTests.mm
│ │ │ ├── StatementDeleteTests.mm
│ │ │ ├── StatementDetachTests.mm
│ │ │ ├── StatementDropIndexTests.mm
│ │ │ ├── StatementDropTableTests.mm
│ │ │ ├── StatementDropTriggerTests.mm
│ │ │ ├── StatementDropViewTests.mm
│ │ │ ├── StatementExplainTests.mm
│ │ │ ├── StatementInsertTests.mm
│ │ │ ├── StatementPragmaTests.mm
│ │ │ ├── StatementReindexTests.mm
│ │ │ ├── StatementReleaseTests.mm
│ │ │ ├── StatementRollbackTests.mm
│ │ │ ├── StatementSavepointTests.mm
│ │ │ ├── StatementSelectTests.mm
│ │ │ ├── StatementTests.mm
│ │ │ ├── StatementUpdateTests.mm
│ │ │ ├── StatementVacuumTests.mm
│ │ │ ├── StoppableIterationTests.mm
│ │ │ ├── SyntaxListTests.mm
│ │ │ ├── TableConstraintTests.mm
│ │ │ ├── TableOrSubqueryTests.mm
│ │ │ ├── UpsertTests.mm
│ │ │ ├── ValueTests.mm
│ │ │ ├── WCTPropertyTests.mm
│ │ │ ├── WCTResultColumnTests.mm
│ │ │ ├── WINQAssertion.h
│ │ │ ├── WINQAssertion.mm
│ │ │ └── WindowDefTests.mm
│ │ └── transaction/
│ │ ├── WCTDatabase+Transaction.h
│ │ ├── WCTDatabase+Transaction.mm
│ │ ├── WCTHandle+Transaction.h
│ │ ├── WCTHandle+Transaction.mm
│ │ └── WCTTransaction.h
│ ├── support/
│ │ ├── Base.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Info.plist
│ │ ├── Release.xcconfig
│ │ ├── Tests.xcconfig
│ │ ├── WCDB.modulemap
│ │ ├── WCDB.xcconfig
│ │ ├── WCDBCpp.modulemap
│ │ ├── WCDBObjc.modulemap
│ │ ├── WCDBSwift.modulemap
│ │ ├── WCDBSwift.xcconfig
│ │ ├── WCDBWithoutCompression.xcconfig
│ │ ├── ZstdBase.xcconfig
│ │ ├── ZstdDebug.xcconfig
│ │ └── ZstdRelease.xcconfig
│ ├── swift/
│ │ ├── bridge/
│ │ │ ├── ErrorBridge.swift
│ │ │ ├── FTSBridge.swift
│ │ │ ├── ObjectBridge.swift
│ │ │ └── WCTBridgeProperty.swift
│ │ ├── builtin/
│ │ │ ├── CodableType.swift
│ │ │ └── Master.swift
│ │ ├── core/
│ │ │ ├── base/
│ │ │ │ ├── BaseType.swift
│ │ │ │ ├── Database+WCTTableCoding.swift
│ │ │ │ ├── Database.swift
│ │ │ │ ├── Handle+WCTTableCoding.swift
│ │ │ │ ├── Handle.swift
│ │ │ │ ├── HandleStatement+WCTTableCoding.swift
│ │ │ │ ├── PreparedStatement.swift
│ │ │ │ ├── Table+WCTTableCoding.swift
│ │ │ │ └── Table.swift
│ │ │ ├── binding/
│ │ │ │ ├── CheckExpressionConfig.swift
│ │ │ │ ├── ColumnConstraintConfig.swift
│ │ │ │ ├── ForeignKeyConfig.swift
│ │ │ │ ├── IndexConfig.swift
│ │ │ │ ├── MultiPrimaryConfig.swift
│ │ │ │ ├── MultiUniqueConfig.swift
│ │ │ │ ├── Property.swift
│ │ │ │ ├── Redirectable.swift
│ │ │ │ ├── TableBinding.swift
│ │ │ │ ├── TableConfiguration.swift
│ │ │ │ └── VirtualTableConfig.swift
│ │ │ ├── chaincall/
│ │ │ │ ├── ChainCall+WCTTableCoding.swift
│ │ │ │ ├── ChainCall.swift
│ │ │ │ ├── Declare.swift
│ │ │ │ ├── Delete.swift
│ │ │ │ ├── Insert+WCTTableCoding.swift
│ │ │ │ ├── Insert.swift
│ │ │ │ ├── MultiSelect.swift
│ │ │ │ ├── RowSelect.swift
│ │ │ │ ├── Select+WCTTableCoding.swift
│ │ │ │ ├── Select.swift
│ │ │ │ ├── Selectable.swift
│ │ │ │ ├── TableChainCall+WCTTableCoding.swift
│ │ │ │ ├── TableChainCall.swift
│ │ │ │ ├── Update+WCTTableCoding.swift
│ │ │ │ └── Update.swift
│ │ │ ├── codable/
│ │ │ │ ├── CodingTableKey.swift
│ │ │ │ ├── ColumnCodable.swift
│ │ │ │ ├── ColumnTypeDecoder.swift
│ │ │ │ ├── TableCodable.swift
│ │ │ │ ├── TableDecoder.swift
│ │ │ │ └── TableEncoder.swift
│ │ │ └── interface/
│ │ │ ├── DeleteInterface.swift
│ │ │ ├── InsertInterface+WCTTableCoding.swift
│ │ │ ├── InsertInterface.swift
│ │ │ ├── SelectInterface+WCTTableCoding.swift
│ │ │ ├── SelectInterface.swift
│ │ │ ├── StatementInterface+WCTTableCoding.swift
│ │ │ ├── StatementInterface.swift
│ │ │ ├── StatementSelectInterface.swift
│ │ │ ├── TableCRUDInterface+WCTTableCoding.swift
│ │ │ ├── TableCRUDInterface.swift
│ │ │ ├── TableInterface+WCTTableCoding.swift
│ │ │ ├── TableInterface.swift
│ │ │ ├── TransactionInterface.swift
│ │ │ ├── UpdateInterface+WCTTableCoding.swift
│ │ │ └── UpdateInterface.swift
│ │ ├── tests/
│ │ │ ├── benchmark/
│ │ │ │ ├── baseline/
│ │ │ │ │ ├── BaselineBatchWriteBenchmark.swift
│ │ │ │ │ ├── BaselineReadBenchmark.swift
│ │ │ │ │ └── BaselineWriteBenchmark.swift
│ │ │ │ ├── cipher/
│ │ │ │ │ ├── CipherReadBenchmark.swift
│ │ │ │ │ └── CipherWriteBenchmark.swift
│ │ │ │ ├── multithread/
│ │ │ │ │ ├── BaseMultithreadBenchmark.swift
│ │ │ │ │ ├── MultithreadReadReadBenchmark.swift
│ │ │ │ │ ├── MultithreadReadWriteBenchmark.swift
│ │ │ │ │ └── MultithreadWriteWriteBenchmark.swift
│ │ │ │ ├── other/
│ │ │ │ │ ├── InitializationBenchmark.swift
│ │ │ │ │ └── SyncWriteBenchmark.swift
│ │ │ │ └── supporting/
│ │ │ │ ├── BaseBenchmark.swift
│ │ │ │ ├── BenchmarkObject.swift
│ │ │ │ └── Config.swift
│ │ │ ├── common/
│ │ │ │ ├── Assert.swift
│ │ │ │ ├── BaseTestCase.swift
│ │ │ │ ├── Convenience.swift
│ │ │ │ ├── DatabaseTestCase.swift
│ │ │ │ ├── Random.swift
│ │ │ │ ├── RandomData.swift
│ │ │ │ └── TestObject.swift
│ │ │ ├── crud/
│ │ │ │ ├── AdvanceCRUDTests.swift
│ │ │ │ ├── AdvanceTests.swift
│ │ │ │ ├── CRUDTestCase.swift
│ │ │ │ ├── DatabaseTests.swift
│ │ │ │ ├── DeleteInterfaceTests.swift
│ │ │ │ ├── DeleteTests.swift
│ │ │ │ ├── InsertInterfaceTests.swift
│ │ │ │ ├── InsertTests.swift
│ │ │ │ ├── MultiSelectTests.swift
│ │ │ │ ├── MultithreadTests.swift
│ │ │ │ ├── RowSelectTests.swift
│ │ │ │ ├── SelectInterfaceTests.swift
│ │ │ │ ├── SelectTests.swift
│ │ │ │ ├── TableTests.swift
│ │ │ │ ├── TypedTests.swift
│ │ │ │ ├── UpdateInterfaceTests.swift
│ │ │ │ └── UpdateTests.swift
│ │ │ ├── orm/
│ │ │ │ ├── AutoAddColumnTests.swift
│ │ │ │ ├── ColumnConstraintBindingTests.swift
│ │ │ │ ├── IndexBindingTests.swift
│ │ │ │ ├── ORMTestCase.swift
│ │ │ │ ├── TableConstraintBindingTests.swift
│ │ │ │ └── VirtualTableBindingTests.swift
│ │ │ ├── other/
│ │ │ │ ├── FileTests.swift
│ │ │ │ ├── HandleTest.swift
│ │ │ │ ├── RepairTests.swift
│ │ │ │ ├── TokenizerTests.swift
│ │ │ │ └── TracerTests.swift
│ │ │ └── winq/
│ │ │ ├── identifier/
│ │ │ │ ├── BindParameterTests.swift
│ │ │ │ ├── ColumnConstraintTests.swift
│ │ │ │ ├── ColumnDefTests.swift
│ │ │ │ ├── ColumnTests.swift
│ │ │ │ ├── ColumnTypeTests.swift
│ │ │ │ ├── CommonTableExpressionTests.swift
│ │ │ │ ├── ExpressionTests.swift
│ │ │ │ ├── ForeignKeyTests.swift
│ │ │ │ ├── FrameSpecTests.swift
│ │ │ │ ├── IndexedColumnTests.swift
│ │ │ │ ├── JoinTests.swift
│ │ │ │ ├── LiteralValueTests.swift
│ │ │ │ ├── OrderingTermTests.swift
│ │ │ │ ├── QualifiedTableTests.swift
│ │ │ │ ├── RaiseFunctionTests.swift
│ │ │ │ ├── ResultColumnTests.swift
│ │ │ │ ├── SchemaTests.swift
│ │ │ │ ├── TableConstraintTests.swift
│ │ │ │ ├── TableOrSubqueryTests.swift
│ │ │ │ ├── UpsertTests.swift
│ │ │ │ └── WindowDefTests.swift
│ │ │ └── statement/
│ │ │ ├── StatementAlterTableTests.swift
│ │ │ ├── StatementAnalyzeTests.swift
│ │ │ ├── StatementAttachTests.swift
│ │ │ ├── StatementBeginTests.swift
│ │ │ ├── StatementCommitTests.swift
│ │ │ ├── StatementCreateIndexTests.swift
│ │ │ ├── StatementCreateTableTests.swift
│ │ │ ├── StatementCreateTriggerTests.swift
│ │ │ ├── StatementCreateViewTests.swift
│ │ │ ├── StatementCreateVirtualTableTests.swift
│ │ │ ├── StatementDeleteTests.swift
│ │ │ ├── StatementDetachTests.swift
│ │ │ ├── StatementDropIndexTests.swift
│ │ │ ├── StatementDropTableTests.swift
│ │ │ ├── StatementDropTriggerTests.swift
│ │ │ ├── StatementDropViewTests.swift
│ │ │ ├── StatementExplainTests.swift
│ │ │ ├── StatementInsertTests.swift
│ │ │ ├── StatementPragmaTests.swift
│ │ │ ├── StatementReindexTests.swift
│ │ │ ├── StatementReleaseTests.swift
│ │ │ ├── StatementRollbackTests.swift
│ │ │ ├── StatementSavepointTests.swift
│ │ │ ├── StatementSelectTests.swift
│ │ │ ├── StatementUpdateTests.swift
│ │ │ └── StatementVacuumTests.swift
│ │ ├── util/
│ │ │ ├── Convenience.swift
│ │ │ ├── Lock.swift
│ │ │ ├── Optional.swift
│ │ │ ├── Recyclable.swift
│ │ │ └── WCDBError.swift
│ │ └── winq/
│ │ ├── Convertible.swift
│ │ ├── Identifier.swift
│ │ ├── Statement.swift
│ │ ├── SyntaxConst.swift
│ │ ├── Value.swift
│ │ ├── identifier/
│ │ │ ├── BindParameter.swift
│ │ │ ├── Column.swift
│ │ │ ├── ColumnConstraint.swift
│ │ │ ├── ColumnDef.swift
│ │ │ ├── CommonTableExpression.swift
│ │ │ ├── Expression.swift
│ │ │ ├── ForeignKey.swift
│ │ │ ├── FrameSpec.swift
│ │ │ ├── IndexedColumn.swift
│ │ │ ├── Join.swift
│ │ │ ├── LiteralValue.swift
│ │ │ ├── Operable.swift
│ │ │ ├── OrderingTerm.swift
│ │ │ ├── Pragma.swift
│ │ │ ├── QualifiedTable.swift
│ │ │ ├── RaiseFunction.swift
│ │ │ ├── ResultColumn.swift
│ │ │ ├── Schema.swift
│ │ │ ├── TableConstraint.swift
│ │ │ ├── TableOrSubquery.swift
│ │ │ ├── Upsert.swift
│ │ │ └── WindowDef.swift
│ │ └── statement/
│ │ ├── StatementAlterTable.swift
│ │ ├── StatementAnalyze.swift
│ │ ├── StatementAttach.swift
│ │ ├── StatementBegin.swift
│ │ ├── StatementCommit.swift
│ │ ├── StatementCreateIndex.swift
│ │ ├── StatementCreateTable.swift
│ │ ├── StatementCreateTrigger.swift
│ │ ├── StatementCreateView.swift
│ │ ├── StatementCreateVirtualTable.swift
│ │ ├── StatementDelete.swift
│ │ ├── StatementDetach.swift
│ │ ├── StatementDropIndex.swift
│ │ ├── StatementDropTable.swift
│ │ ├── StatementDropTrigger.swift
│ │ ├── StatementDropView.swift
│ │ ├── StatementExplain.swift
│ │ ├── StatementInsert.swift
│ │ ├── StatementPragma.swift
│ │ ├── StatementReindex.swift
│ │ ├── StatementRelease.swift
│ │ ├── StatementRollback.swift
│ │ ├── StatementSavepoint.swift
│ │ ├── StatementSelect.swift
│ │ ├── StatementUpdate.swift
│ │ └── StatementVacuum.swift
│ ├── utility.cmake
│ ├── zstd.cmake
│ └── zstd.xcodeproj/
│ └── project.pbxproj
└── tools/
├── GetHeaderSearchPath.py
├── build-depends-android.sh
├── createHeaderLink.sh
├── dbbackup.c
├── dbrepair.c
├── docs/
│ ├── docs.sh
│ └── objc/
│ └── settings.plist
├── format/
│ ├── code.sh
│ └── main.sh
├── git/
│ ├── hook.sh
│ ├── pre-commit
│ └── prepare-commit-msg
├── patch/
│ └── openssl/
│ ├── 0001-Workaround-CPU-detection-on-x86-machines-using-libho.patch
│ ├── 0002-Clean-generated-asm-sources-on-clean-targets.patch
│ └── 0003-Fix-armv4-clang-build.patch
├── prebuild/
│ ├── openssl/
│ │ ├── android/
│ │ │ ├── arm64-v8a/
│ │ │ │ └── libcrypto.a
│ │ │ ├── armeabi-v7a/
│ │ │ │ └── libcrypto.a
│ │ │ ├── x86/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ └── libcrypto.a
│ │ ├── android_old/
│ │ │ ├── arm/
│ │ │ │ ├── include/
│ │ │ │ │ └── openssl/
│ │ │ │ │ ├── aes.h
│ │ │ │ │ ├── asn1.h
│ │ │ │ │ ├── asn1_mac.h
│ │ │ │ │ ├── asn1t.h
│ │ │ │ │ ├── bio.h
│ │ │ │ │ ├── blowfish.h
│ │ │ │ │ ├── bn.h
│ │ │ │ │ ├── buffer.h
│ │ │ │ │ ├── camellia.h
│ │ │ │ │ ├── cast.h
│ │ │ │ │ ├── cmac.h
│ │ │ │ │ ├── cms.h
│ │ │ │ │ ├── conf.h
│ │ │ │ │ ├── conf_api.h
│ │ │ │ │ ├── crypto.h
│ │ │ │ │ ├── des.h
│ │ │ │ │ ├── des_old.h
│ │ │ │ │ ├── dh.h
│ │ │ │ │ ├── dsa.h
│ │ │ │ │ ├── dso.h
│ │ │ │ │ ├── dtls1.h
│ │ │ │ │ ├── e_os2.h
│ │ │ │ │ ├── ebcdic.h
│ │ │ │ │ ├── ec.h
│ │ │ │ │ ├── ecdh.h
│ │ │ │ │ ├── ecdsa.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── evp.h
│ │ │ │ │ ├── hmac.h
│ │ │ │ │ ├── idea.h
│ │ │ │ │ ├── krb5_asn.h
│ │ │ │ │ ├── kssl.h
│ │ │ │ │ ├── lhash.h
│ │ │ │ │ ├── md4.h
│ │ │ │ │ ├── md5.h
│ │ │ │ │ ├── mdc2.h
│ │ │ │ │ ├── modes.h
│ │ │ │ │ ├── obj_mac.h
│ │ │ │ │ ├── objects.h
│ │ │ │ │ ├── ocsp.h
│ │ │ │ │ ├── opensslconf.h
│ │ │ │ │ ├── opensslv.h
│ │ │ │ │ ├── ossl_typ.h
│ │ │ │ │ ├── pem.h
│ │ │ │ │ ├── pem2.h
│ │ │ │ │ ├── pkcs12.h
│ │ │ │ │ ├── pkcs7.h
│ │ │ │ │ ├── pqueue.h
│ │ │ │ │ ├── rand.h
│ │ │ │ │ ├── rc2.h
│ │ │ │ │ ├── rc4.h
│ │ │ │ │ ├── ripemd.h
│ │ │ │ │ ├── rsa.h
│ │ │ │ │ ├── safestack.h
│ │ │ │ │ ├── seed.h
│ │ │ │ │ ├── sha.h
│ │ │ │ │ ├── srp.h
│ │ │ │ │ ├── srtp.h
│ │ │ │ │ ├── ssl.h
│ │ │ │ │ ├── ssl2.h
│ │ │ │ │ ├── ssl23.h
│ │ │ │ │ ├── ssl3.h
│ │ │ │ │ ├── stack.h
│ │ │ │ │ ├── symhacks.h
│ │ │ │ │ ├── tls1.h
│ │ │ │ │ ├── ts.h
│ │ │ │ │ ├── txt_db.h
│ │ │ │ │ ├── ui.h
│ │ │ │ │ ├── ui_compat.h
│ │ │ │ │ ├── whrlpool.h
│ │ │ │ │ ├── x509.h
│ │ │ │ │ ├── x509_vfy.h
│ │ │ │ │ └── x509v3.h
│ │ │ │ └── lib/
│ │ │ │ └── libcrypto.a
│ │ │ ├── arm64/
│ │ │ │ ├── include/
│ │ │ │ │ └── openssl/
│ │ │ │ │ ├── aes.h
│ │ │ │ │ ├── asn1.h
│ │ │ │ │ ├── asn1_mac.h
│ │ │ │ │ ├── asn1t.h
│ │ │ │ │ ├── bio.h
│ │ │ │ │ ├── blowfish.h
│ │ │ │ │ ├── bn.h
│ │ │ │ │ ├── buffer.h
│ │ │ │ │ ├── camellia.h
│ │ │ │ │ ├── cast.h
│ │ │ │ │ ├── cmac.h
│ │ │ │ │ ├── cms.h
│ │ │ │ │ ├── conf.h
│ │ │ │ │ ├── conf_api.h
│ │ │ │ │ ├── crypto.h
│ │ │ │ │ ├── des.h
│ │ │ │ │ ├── des_old.h
│ │ │ │ │ ├── dh.h
│ │ │ │ │ ├── dsa.h
│ │ │ │ │ ├── dso.h
│ │ │ │ │ ├── dtls1.h
│ │ │ │ │ ├── e_os2.h
│ │ │ │ │ ├── ebcdic.h
│ │ │ │ │ ├── ec.h
│ │ │ │ │ ├── ecdh.h
│ │ │ │ │ ├── ecdsa.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── evp.h
│ │ │ │ │ ├── hmac.h
│ │ │ │ │ ├── idea.h
│ │ │ │ │ ├── krb5_asn.h
│ │ │ │ │ ├── kssl.h
│ │ │ │ │ ├── lhash.h
│ │ │ │ │ ├── md4.h
│ │ │ │ │ ├── md5.h
│ │ │ │ │ ├── mdc2.h
│ │ │ │ │ ├── modes.h
│ │ │ │ │ ├── obj_mac.h
│ │ │ │ │ ├── objects.h
│ │ │ │ │ ├── ocsp.h
│ │ │ │ │ ├── opensslconf.h
│ │ │ │ │ ├── opensslv.h
│ │ │ │ │ ├── ossl_typ.h
│ │ │ │ │ ├── pem.h
│ │ │ │ │ ├── pem2.h
│ │ │ │ │ ├── pkcs12.h
│ │ │ │ │ ├── pkcs7.h
│ │ │ │ │ ├── pqueue.h
│ │ │ │ │ ├── rand.h
│ │ │ │ │ ├── rc2.h
│ │ │ │ │ ├── rc4.h
│ │ │ │ │ ├── ripemd.h
│ │ │ │ │ ├── rsa.h
│ │ │ │ │ ├── safestack.h
│ │ │ │ │ ├── seed.h
│ │ │ │ │ ├── sha.h
│ │ │ │ │ ├── srp.h
│ │ │ │ │ ├── srtp.h
│ │ │ │ │ ├── ssl.h
│ │ │ │ │ ├── ssl2.h
│ │ │ │ │ ├── ssl23.h
│ │ │ │ │ ├── ssl3.h
│ │ │ │ │ ├── stack.h
│ │ │ │ │ ├── symhacks.h
│ │ │ │ │ ├── tls1.h
│ │ │ │ │ ├── ts.h
│ │ │ │ │ ├── txt_db.h
│ │ │ │ │ ├── ui.h
│ │ │ │ │ ├── ui_compat.h
│ │ │ │ │ ├── whrlpool.h
│ │ │ │ │ ├── x509.h
│ │ │ │ │ ├── x509_vfy.h
│ │ │ │ │ └── x509v3.h
│ │ │ │ └── lib/
│ │ │ │ └── libcrypto.a
│ │ │ ├── x86/
│ │ │ │ ├── include/
│ │ │ │ │ └── openssl/
│ │ │ │ │ ├── aes.h
│ │ │ │ │ ├── asn1.h
│ │ │ │ │ ├── asn1_mac.h
│ │ │ │ │ ├── asn1t.h
│ │ │ │ │ ├── bio.h
│ │ │ │ │ ├── blowfish.h
│ │ │ │ │ ├── bn.h
│ │ │ │ │ ├── buffer.h
│ │ │ │ │ ├── camellia.h
│ │ │ │ │ ├── cast.h
│ │ │ │ │ ├── cmac.h
│ │ │ │ │ ├── cms.h
│ │ │ │ │ ├── conf.h
│ │ │ │ │ ├── conf_api.h
│ │ │ │ │ ├── crypto.h
│ │ │ │ │ ├── des.h
│ │ │ │ │ ├── des_old.h
│ │ │ │ │ ├── dh.h
│ │ │ │ │ ├── dsa.h
│ │ │ │ │ ├── dso.h
│ │ │ │ │ ├── dtls1.h
│ │ │ │ │ ├── e_os2.h
│ │ │ │ │ ├── ebcdic.h
│ │ │ │ │ ├── ec.h
│ │ │ │ │ ├── ecdh.h
│ │ │ │ │ ├── ecdsa.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── evp.h
│ │ │ │ │ ├── hmac.h
│ │ │ │ │ ├── idea.h
│ │ │ │ │ ├── krb5_asn.h
│ │ │ │ │ ├── kssl.h
│ │ │ │ │ ├── lhash.h
│ │ │ │ │ ├── md4.h
│ │ │ │ │ ├── md5.h
│ │ │ │ │ ├── mdc2.h
│ │ │ │ │ ├── modes.h
│ │ │ │ │ ├── obj_mac.h
│ │ │ │ │ ├── objects.h
│ │ │ │ │ ├── ocsp.h
│ │ │ │ │ ├── opensslconf.h
│ │ │ │ │ ├── opensslv.h
│ │ │ │ │ ├── ossl_typ.h
│ │ │ │ │ ├── pem.h
│ │ │ │ │ ├── pem2.h
│ │ │ │ │ ├── pkcs12.h
│ │ │ │ │ ├── pkcs7.h
│ │ │ │ │ ├── pqueue.h
│ │ │ │ │ ├── rand.h
│ │ │ │ │ ├── rc4.h
│ │ │ │ │ ├── ripemd.h
│ │ │ │ │ ├── rsa.h
│ │ │ │ │ ├── safestack.h
│ │ │ │ │ ├── seed.h
│ │ │ │ │ ├── sha.h
│ │ │ │ │ ├── srp.h
│ │ │ │ │ ├── srtp.h
│ │ │ │ │ ├── ssl.h
│ │ │ │ │ ├── ssl2.h
│ │ │ │ │ ├── ssl23.h
│ │ │ │ │ ├── ssl3.h
│ │ │ │ │ ├── stack.h
│ │ │ │ │ ├── symhacks.h
│ │ │ │ │ ├── tls1.h
│ │ │ │ │ ├── ts.h
│ │ │ │ │ ├── txt_db.h
│ │ │ │ │ ├── ui.h
│ │ │ │ │ ├── ui_compat.h
│ │ │ │ │ ├── whrlpool.h
│ │ │ │ │ ├── x509.h
│ │ │ │ │ ├── x509_vfy.h
│ │ │ │ │ └── x509v3.h
│ │ │ │ └── lib/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ ├── include/
│ │ │ │ └── openssl/
│ │ │ │ ├── aes.h
│ │ │ │ ├── asn1.h
│ │ │ │ ├── asn1_mac.h
│ │ │ │ ├── asn1t.h
│ │ │ │ ├── bio.h
│ │ │ │ ├── blowfish.h
│ │ │ │ ├── bn.h
│ │ │ │ ├── buffer.h
│ │ │ │ ├── camellia.h
│ │ │ │ ├── cmac.h
│ │ │ │ ├── cms.h
│ │ │ │ ├── conf.h
│ │ │ │ ├── conf_api.h
│ │ │ │ ├── crypto.h
│ │ │ │ ├── des.h
│ │ │ │ ├── des_old.h
│ │ │ │ ├── dso.h
│ │ │ │ ├── e_os2.h
│ │ │ │ ├── ebcdic.h
│ │ │ │ ├── err.h
│ │ │ │ ├── evp.h
│ │ │ │ ├── hmac.h
│ │ │ │ ├── idea.h
│ │ │ │ ├── krb5_asn.h
│ │ │ │ ├── lhash.h
│ │ │ │ ├── modes.h
│ │ │ │ ├── obj_mac.h
│ │ │ │ ├── objects.h
│ │ │ │ ├── ocsp.h
│ │ │ │ ├── opensslconf.h
│ │ │ │ ├── opensslv.h
│ │ │ │ ├── ossl_typ.h
│ │ │ │ ├── pem.h
│ │ │ │ ├── pem2.h
│ │ │ │ ├── pkcs12.h
│ │ │ │ ├── pkcs7.h
│ │ │ │ ├── pqueue.h
│ │ │ │ ├── rand.h
│ │ │ │ ├── rc4.h
│ │ │ │ ├── safestack.h
│ │ │ │ ├── seed.h
│ │ │ │ ├── sha.h
│ │ │ │ ├── srp.h
│ │ │ │ ├── stack.h
│ │ │ │ ├── symhacks.h
│ │ │ │ ├── ts.h
│ │ │ │ ├── txt_db.h
│ │ │ │ ├── ui.h
│ │ │ │ ├── ui_compat.h
│ │ │ │ ├── whrlpool.h
│ │ │ │ ├── x509.h
│ │ │ │ ├── x509_vfy.h
│ │ │ │ └── x509v3.h
│ │ │ └── lib/
│ │ │ └── libcrypto.a
│ │ ├── include/
│ │ │ └── openssl/
│ │ │ ├── aes.h
│ │ │ ├── asn1.h
│ │ │ ├── asn1_mac.h
│ │ │ ├── asn1err.h
│ │ │ ├── asn1t.h
│ │ │ ├── async.h
│ │ │ ├── asyncerr.h
│ │ │ ├── bio.h
│ │ │ ├── bioerr.h
│ │ │ ├── blowfish.h
│ │ │ ├── bn.h
│ │ │ ├── bnerr.h
│ │ │ ├── buffer.h
│ │ │ ├── buffererr.h
│ │ │ ├── camellia.h
│ │ │ ├── cast.h
│ │ │ ├── cmac.h
│ │ │ ├── cms.h
│ │ │ ├── cmserr.h
│ │ │ ├── comp.h
│ │ │ ├── comperr.h
│ │ │ ├── conf.h
│ │ │ ├── conf_api.h
│ │ │ ├── conferr.h
│ │ │ ├── crypto.h
│ │ │ ├── cryptoerr.h
│ │ │ ├── ct.h
│ │ │ ├── cterr.h
│ │ │ ├── des.h
│ │ │ ├── dh.h
│ │ │ ├── dherr.h
│ │ │ ├── dsa.h
│ │ │ ├── dsaerr.h
│ │ │ ├── dtls1.h
│ │ │ ├── e_os2.h
│ │ │ ├── ebcdic.h
│ │ │ ├── ec.h
│ │ │ ├── ecdh.h
│ │ │ ├── ecdsa.h
│ │ │ ├── ecerr.h
│ │ │ ├── engine.h
│ │ │ ├── engineerr.h
│ │ │ ├── err.h
│ │ │ ├── evp.h
│ │ │ ├── evperr.h
│ │ │ ├── hmac.h
│ │ │ ├── idea.h
│ │ │ ├── kdf.h
│ │ │ ├── kdferr.h
│ │ │ ├── lhash.h
│ │ │ ├── md2.h
│ │ │ ├── md4.h
│ │ │ ├── md5.h
│ │ │ ├── mdc2.h
│ │ │ ├── modes.h
│ │ │ ├── obj_mac.h
│ │ │ ├── objects.h
│ │ │ ├── objectserr.h
│ │ │ ├── ocsp.h
│ │ │ ├── ocsperr.h
│ │ │ ├── opensslconf-android.h
│ │ │ ├── opensslconf-apple.h
│ │ │ ├── opensslconf-windows.h
│ │ │ ├── opensslconf.h
│ │ │ ├── opensslconf_android-arm.h
│ │ │ ├── opensslconf_android-arm64.h
│ │ │ ├── opensslconf_android-x86_64.h
│ │ │ ├── opensslconf_android64-x86_64.h
│ │ │ ├── opensslconf_catalyst_arm64.h
│ │ │ ├── opensslconf_catalyst_x86_64.h
│ │ │ ├── opensslconf_default.h
│ │ │ ├── opensslconf_ios_arm64.h
│ │ │ ├── opensslconf_ios_sim_x86_64.h
│ │ │ ├── opensslconf_macos_arm64.h
│ │ │ ├── opensslconf_macos_x86_64.h
│ │ │ ├── opensslconf_watchos_arm64_32.h
│ │ │ ├── opensslconf_watchos_armv7k.h
│ │ │ ├── opensslconf_watchos_sim_i386.h
│ │ │ ├── opensslconf_watchos_sim_x86_64.h
│ │ │ ├── opensslconf_windows-x86.h
│ │ │ ├── opensslconf_windows-x86_64.h
│ │ │ ├── opensslv.h
│ │ │ ├── ossl_typ.h
│ │ │ ├── pem.h
│ │ │ ├── pem2.h
│ │ │ ├── pemerr.h
│ │ │ ├── pkcs12.h
│ │ │ ├── pkcs12err.h
│ │ │ ├── pkcs7.h
│ │ │ ├── pkcs7err.h
│ │ │ ├── rand.h
│ │ │ ├── rand_drbg.h
│ │ │ ├── randerr.h
│ │ │ ├── rc2.h
│ │ │ ├── rc4.h
│ │ │ ├── rc5.h
│ │ │ ├── ripemd.h
│ │ │ ├── rsa.h
│ │ │ ├── rsaerr.h
│ │ │ ├── safestack.h
│ │ │ ├── seed.h
│ │ │ ├── sha.h
│ │ │ ├── srp.h
│ │ │ ├── srtp.h
│ │ │ ├── ssl.h
│ │ │ ├── ssl2.h
│ │ │ ├── ssl3.h
│ │ │ ├── sslerr.h
│ │ │ ├── stack.h
│ │ │ ├── store.h
│ │ │ ├── storeerr.h
│ │ │ ├── symhacks.h
│ │ │ ├── tls1.h
│ │ │ ├── ts.h
│ │ │ ├── tserr.h
│ │ │ ├── txt_db.h
│ │ │ ├── ui.h
│ │ │ ├── uierr.h
│ │ │ ├── whrlpool.h
│ │ │ ├── x509.h
│ │ │ ├── x509_vfy.h
│ │ │ ├── x509err.h
│ │ │ ├── x509v3.h
│ │ │ └── x509v3err.h
│ │ ├── linux/
│ │ │ ├── arm64/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ └── libcrypto.a
│ │ ├── ohos/
│ │ │ ├── arm64-v8a/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ └── libcrypto.a
│ │ └── windows/
│ │ ├── win32/
│ │ │ ├── libcrypto.lib
│ │ │ ├── libssl.lib
│ │ │ └── ossl_static.pdb
│ │ └── win64/
│ │ ├── libcrypto.lib
│ │ ├── libssl.lib
│ │ └── ossl_static.pdb
│ └── zlib/
│ ├── include/
│ │ ├── zconf.h
│ │ └── zlib.h
│ ├── linux/
│ │ ├── arm64/
│ │ │ └── libz.a
│ │ └── x86_64/
│ │ └── libz.a
│ └── windows/
│ ├── win32/
│ │ └── zlibstatic.lib
│ └── win64/
│ └── zlibstatic.lib
├── templates/
│ ├── .swiftlint.yml
│ ├── archive/
│ │ └── archive.sh
│ ├── codesnippets/
│ │ ├── WCDB.ColumnCodableClass.Data.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.Double.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.Int32.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.Int64.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.String.swift.codesnippet
│ │ └── WCDB.TableCodableClass.swift.codesnippet
│ ├── install.sh
│ └── xctemplates/
│ └── WCDB/
│ ├── ColumnCodable.xctemplate/
│ │ ├── Objective-CData/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CDouble/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CInteger32/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CInteger64/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CString/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── SwiftData/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftDouble/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftInteger32/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftInteger64/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftString/
│ │ │ └── ___FILEBASENAME___.swift
│ │ └── TemplateInfo.plist
│ ├── TableCodable.xctemplate/
│ │ ├── Objective-C/
│ │ │ ├── ___FILEBASENAME___+WCTTableCoding.h
│ │ │ ├── ___FILEBASENAME___.h
│ │ │ └── ___FILEBASENAME___.mm
│ │ ├── Swift/
│ │ │ └── ___FILEBASENAME___.swift
│ │ └── TemplateInfo.plist
│ └── Tokenizer.xctemplate/
│ ├── Objective-C/
│ │ ├── ___FILEBASENAME___Tokenizer.h
│ │ └── ___FILEBASENAME___Tokenizer.mm
│ ├── Swift/
│ │ └── ___FILEBASENAME___.swift
│ └── TemplateInfo.plist
└── version/
├── build.sh
├── build_xcframework.sh
├── bump.sh
└── settings.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
---
BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: InlineOnly
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: All
BreakBeforeBraces: Custom
BreakBeforeTernaryOperators: false
BreakConstructorInitializers: BeforeComma
BreakStringLiterals: false
ColumnLimit: 0
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 0
ContinuationIndentWidth: 0
Cpp11BracedListStyle: false
DerivePointerAlignment: true
FixNamespaceComments: true
IncludeBlocks: Preserve
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 1
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 1
PenaltyBreakFirstLessLess: 1
PenaltyBreakString: 1
PenaltyExcessCharacter: 1
PenaltyReturnTypeOnItsOwnLine: 1
PointerAlignment: Right
ReflowComments: false
SortIncludes: true
SortUsingDeclarations: false
SpaceAfterCStyleCast: true
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: true
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 4
UseTab: Never
---
Language: Cpp
ColumnLimit: 80
---
Language: ObjC
ColumnLimit: 0
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 7
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- bug
- enhancement
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: true
================================================
FILE: .gitignore
================================================
# Visual Studio Code
.vscode
# Visual Studio
.vs
# Android Studio, Gradle
*.iml
.gradle
.idea
.settings
.project
.classpath
.DS_Store
.externalNativeBuild
# Xcode
*.pbxuser
xcuserdata
xcuserdata/*
*.xcworkspace/*
*.xcworkspace
DerivedData
#CMake
src/build/
# WCDB
WCDB.framework
# SwiftPM
/.build
Package.resolved
# WeChat
WeChat/conan/*
# Mac Catalyst
tools/version/build
# wconan
WeChat/.wconan2/
WeChat/wconan_build/
WeChat/wconan_libs/
WeChat/wconan_local_build/
WeChat/wconan_package.lock
WeChat/wconan_publish.py
WeChat/cmake-build-*/
WeChat/compile.log
WeChat/apple_build/
WeChat/export_headers/
================================================
FILE: .gitmodules
================================================
[submodule "sqlcipher"]
path = sqlcipher
url = https://github.com/Tencent/sqlcipher.git
[submodule "openssl"]
path = openssl
url = https://github.com/openssl/openssl.git
[submodule "zstd"]
path = zstd
url = https://github.com/facebook/zstd.git
================================================
FILE: .swift-version
================================================
5
================================================
FILE: CHANGELOG.md
================================================
## v2.1.15
* Fix build error on Xcode 26
* Support Mac Catalyst
* Fix mmap crash In windows
* Fix some known bugs
## v2.1.14
* Support 16kb pagesize for Android
* Supports using ksp in Kotlin version 2.1.0+
* Fix stack overflow crash
* Fix some known bugs
## v2.1.13
* Fix compile error of Swift Package Manager
* Fix crash caused by in-transaction handle
* Convert ANSI error msg in windows to UTF8
## v2.1.12
* Fix build error on Xcode 26 beta
* Fix empty string crash in java/kotlin winq
* Fix linking error on linux x86
## v2.1.11
* Support to open database in readonly mode
* Support to create in-memory database in java/c++/swift
* Fix the exception problem of tableExist method in Java/Kotlin
## v2.1.10
* Disable checkpoint fullsync in apple platform, it will significantly reduce disk IO
* Add main db file protection to windows
* Reduce memory cost of data compression
* Reduce handle usage of data backup
* Support to detect schema corruption
* Fix some known bugs and compile issues
## v2.1.9
* Add lite mode (Set journal mode and synchronous flag to OFF)
* Fix memory leak and other known bug
## v2.1.8
* Increase migration speed
* Fix compile error of SwiftPM in Xcode 16
## v2.1.7
* WCDB C++ supports OpenHarmony OS
* Support to recompress existing data with new configuration
* Support auto vacuum
* Support Swift6
* Fix some compile issues
## v2.1.6
* Some bugfix for data repair, Java/Kotlin ORM and Swift query
* Fix some compile error and warning
## v2.1.5
* Support legacy mmicu tokenizer in WCDB Java/Kotlin
* Support to rollback compression
* Improve performance of vacuum
* Add valueOr interface to Optional
* Some bugfix for compression and vacuum
## v2.1.4
* Fix the compile error of WCDB Java/Koltin caused by minifyEnabled flag
* Add regular memory verification to Zstd dict
## v2.1.3
* Add ProGuard config for WCDB Java/Kotlin
* Support to build WCDB C++ as a framework on Apple platform with CMake
* Support to insert an array of object pointers or object shared pointers in WCDB C++
* Fix the bug that error cannot be obtained through database
## v2.1.2
* Some bugfix for data compression
* Fix compile error of WCDB Objc on Carthage
* Fix compile error of WCDB C++ when built as a CMake submodule
## v2.1.1
* Some bugfix for WCDB C++ and WCDB Swift
* Fix compile error on Mac Catalyst
## v2.1.0
* Add WCDB Java/Kotlin
* Support data compression
* Support incremental data backup
* Support to configure a filter condition for data migration
* Support to use std::optional and std::shared_ptr in C++ ORM
* C++ ORM supports inheritance
* Add more monitoring capabilities
* WCDB Swift supports Swift Package Manager
## v2.0.4
* Support to asynchronously interrupt database operations
* Optimize the handle management mechanism
* Some bugfix for WCDB C++ in Windows
## v2.0.3
* Transaction supports nesting
* Some bug fix for data migration
* Fix compile error in new Xcode
## v2.0.2.5
* Fix compile issue caused by header
## v2.0.2
* WCDB C++ supports Windows
* Optimizie C++ ORM performance
* Downgrade the minimum supported system version for iPhone and Apple watch
## v2.0.1
* Support databases created by old versions of sqlcipher
* Fix crash of WCDB Swift in x86 emulator
* Support insertOrIgnore
## v2.0.0
* Add WCDB C++
* New implementation of WCDB Swift
* New implementation of Winq
* New implementation of database repair
* Support data migration
* Support FTS5
## v1.1.0
#### iOS/macOS
* Support Swift 5 for Xcode 14.
* Fix compile error for SQLCipher 4.1.0.
* Fix some bug.
## v1.0.8.2
#### iOS/macOS
* Support Swift 4.2 for Xcode 10.2
## v1.0.8.1
#### iOS/macOS
* Fix a bug that archive failed with Xcode new build system.
## v1.0.8
#### Android
* Support for [Room library](https://developer.android.com/topic/libraries/architecture/room) from Android Jetpack. See README and [Wiki](https://github.com/Tencent/wcdb/wiki/Android-WCDB-%E4%BD%BF%E7%94%A8-Room-ORM-%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A) for details.
## v1.0.7.5
#### iOS/macOS
* Compatible with Swift 4.2.
* Enable FTS5 macro for sqlcipher.
## v1.0.7
#### iOS/macOS
* Fix nil string bug while inserting empty string.
* Code template is not installed automatically now.
* Reduce size of binary and provide a non-bitcode scheme for Carthage.
* Avoid conflict between builtin SQLCipher and other SQLite based library(including system library).
## v1.0.6.2
#### iOS/macOS
It's a bug fixed version. Since Swift 4.1.x contains [bugs](https://github.com/Tencent/wcdb/issues/283) that make WCDB fails to compile, developers should use Xcode 10(with Swift 4.2).
##### Swift
* Compatible with Swift 4.2. The `ColumnEncodable` and `ColumnDecodable` is now changed. Check the code snippet, file template or wiki for the new usage.
* Use `Double` column type for `Date`.
FYI, a refactor is needed to fit the new conditional conformance design of Swift 4.2. We will finish it in next version.
#### Android
* Use C++14 and libc++_static runtime on JNI routines.
* Fix "no implementation found" log on libwcdb.so initialization.
* Fix ProGuard rules when importing from AAR package.
## v1.0.6
#### iOS/macOS
It's the first release for WCDB Swift, which contains exactly the same features as the ObjC version, including:
* Object-Relational-Mapping based on Swift 4.0 `Codable` protocol.
* WCDB Integrated Language Query.
* Multithreading safety and concurrency.
* Encryption based on SQLCipher.
* Protection for SQL injection.
* Full text search.
* Corruption recovery.
* ...
For further information, please check tutorial on wiki.
#### Android
* Migrate to gradle plugin 3.0.0, target API 26, and minimal API 14.
* Support NDK r16, change default toolchain to clang.
* Various bug fixes.
## v1.0.5
#### iOS/macOS
* Builtin full-text search support for ORM.
```objc
WCTProperty *tableProperty = WCTSampleFTSData.PropertyNamed(tableNameFTS).match("Eng*")];
[databaseFTS getObjectsOfClass:WCTSampleFTSData.class fromTable:tableNameFTS where:tableProperty.match("Eng*")];
```
* Support read-only databases.
* Some minor bug fixes and code refactor.
#### Android
* Optimize asynchronous checkpointer, greatly improve write performance with WAL and asynchronous checkpointing.
```java
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabaseInWalMode(...);
db.setAsyncCheckpointEnabled(true);
```
* Add benchmark for asynchronous checkpointer.
* Add connection pooling friendly interface. `SQLiteDatabase.setSynchronousMode()` to set database synchronization mode.
* Enable `dbstat` virtual table while compiling.
## v1.0.4
#### Repair Kit
* Add `sqliterk_cancel` function to cancel ongoing output operations.
* Add corresponding Java interface to cancel operations on Android.
#### iOS/macOS
* Builtin `WCTColumnCoding` supports all `id<NSCoding>` objects now.
* Compatible with iOS 11.
* `Fullfsync` is used by default for data integrity.
* Add `-initWithExistingTag:` for `WCTDatabase` to get existing database without path.
```objc
WCTDatabase* database = [WCTDatabase [alloc] initWithPath:path];
database.tag = 123;
WCTDatabase* withoutPath = [[WCTDatabase alloc] initWithExistingTag:123];
```
* Some minor bug fixes, performance improvement and code refactor.
#### Android
* Add asynchronous checkpointing support and custom checkpointing callback. This can
improve performance in WAL mode.
```java
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabaseInWalMode(...);
// Use asynchronous checkpointing.
db.setAsyncCheckpointEnabled(true);
// OR use custom checkpointer.
SQLiteCheckpointListener callback = new SQLiteCheckpointListener() {
//...
};
db.setCheckpointCallback(callback);
```
* Add `SQLiteTrace.onConnectionObtained(...)` interface to trace concurrency performance.
* Add cancelable version of `SQLiteDatabase.execSQL()`. See `CancellationSignal` for details.
```java
CancellationSignal signal = new CancellationSignal();
db.execSQL(longRunningSQL, args, signal);
// on another thread
signal.cancel();
```
* Enable `SQLITE_ENABLE_FTS3_PARENTHESIS` compilation option on SQLCipher, which enables `AND`, `OR` operators in FTS3/4.
* Use `CancellationSignal` for canceling `BackupKit`, `RecoverKit` and `RepairKit` operations. See repair sample for details.
* Add callback interface for `RepairKit` to show progress to the users. See `RepairKit.Callback` and `RepairKit.setCallback()`.
* Do not load `libwcdb.so` if it's already loaded on the first use. This makes WCDB compatible to Tinker framework.
* Various bug fixes.
## v1.0.3
#### Repair Kit
* Fix INTEGER PRIMARY KEY columns not properly recovered.
#### iOS/macOS
* Add `WCTColumnCoding` support for all `WCTValue`. Developers can use `id<WCTColumnCoding>` objects for WINQ and all interfaces.
```objc
//WINQ
NSDate *now = [NSDate date];
[database getObjectsOfClass:Message.class fromTable:tableName where:Message.modifedTime==now];
//Interfaces
[database updateAllRowsInTable:tableName
onProperty:Message.modifiedTime
withValue:[NSDate date]];
```
* Add monitor for all executed SQL to check WINQ correctness.
```objc
//SQL Execution Monitor
[WCTStatistics SetGlobalSQLTrace:^(NSString *sql) {
NSLog(@"SQL: %@", sql);
}];
```
* Update `WCTTableCoding` XCode file template for the best practice of isolating Objective C++ codes. See Wiki page for details.
* Some minor bug fixes.
#### Android
* Add `CursorWindow.windowSize(int)` static method to set or get default size for cursor windows.
* `SQLiteDatabase.dump()` reports IDs for all threads that hold database connections, to aid dead-lock debugging.
* Fix crashing on devices fail to load ICU library.
* Fix `SQLiteTrace.onSQLExecuted(...)` reports negative execution time.
## v1.0.2
#### iOS/macOS
* Performance optimization and benchmark. See Wiki page for details.
* Change builtin `NSData` or `NSMutableData` column coding to raw data format. To be compatible with earlier versions, call `[WCTCompatible sharedCompatible].builtinNSDataColumnCodingCompatibleEnabled = YES`.
* Add `attach`, `detach`, `vacuum`, `savepoiint`, `rollback`, `release`, `reindex`, `explain` statement and SQLCipher related pragma to WINQ.
* Remove auto increment for `insertOrReplace`.
* Rename `updateTable` to `updateRowsInTables`, and `statictics`(typo) to `statistics`.
* Some minor bug fixes.
#### Android
* Performance optimization and benchmark. See Wiki page for details.
* Expose ProGuard rules to AAR package. Fix crash when minify is enabled in gradle.
## v1.0.1
#### iOS/macOS
* Add CocoaPods support.
* Add iOS 7 and macOS 10.9 support. Apps using WCDB can target iOS 7 now.
* Fix an issue that `[WCTDatabase canOpen]` never return YES.
* Fix an issue that the global tracer return some odd values.
* Add `@autoreleasepool` in `runTransaction` to avoid OOM.
#### Android
* Add `x86_64` ABI support.
* Publish debug version of AAR and native symbols. To reference debug version of WCDB library, modify your `build.gradle`.
```gradle
dependencies {
// Append ":debug@aar" to reference debug library.
compile 'com.tencent.wcdb:wcdb-android:1.0.1:debug@aar'
}
```
* **Device-locking** is available in cipher options. Databases created with device-locking enabled can be only accessed in
the same device where the databases are created. Device-locking is currently **in alpha stage**. You can enable it with
the following code:
```java
SQLiteCipherSpec cipher = new SQLiteCipherSpec()
// add the following line to enable device-locking
.setCipher(SQLiteCipherSpec.CIPHER_DEVLOCK);
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, key, cipher, ...);
```
* Various bug fixes.
## v1.0.0
Initial release.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to WCDB
Welcome to [report issues](https://github.com/Tencent/wcdb/issues) or [pull requests](https://github.com/Tencent/wcdb/pulls). It's recommended to read the following Contributing
Guide first before contributing.
## Issues
We use Github Issues to track public bugs and feature requests.
### Search Known Issues First
Please search the existing issues to see if any similar issue or feature request has already been filed. You should make sure your issue isn't redundant.
### Reporting New Issues
If you open an issue, the more information the better. Such as detailed description, screenshot or video of your problem, logcat or code blocks for your crash.
## Pull Requests
We strongly welcome your pull request to make WCDB better.
### Branch Management
There are three main branches here:
1. `master` branch.
* It is the latest (pre-)release branch. We use `master` for tags, with version number `1.1.0`, `1.2.0`, `1.3.0`...
* **Don't submit any PR on `master` branch.**
2. `dev` branch.
* It is our stable developing branch. After full testing, `dev` will be merged to `master` branch for the next release.
* **You are recommended to submit bugfix or feature PR on `dev` branch.**
3. `hotfix` branch.
* It is the latest tag version for hot fix. If we accept your pull request, we may just tag with version number `1.1.1`, `1.2.3`.
* **Only submit urgent PR on `hotfix` branch for next specific release.**
Normal bugfix or feature request should be submitted to `dev` branch. After full testing, we will merge them to `master` branch for the next release.
If you have some urgent bugfixes on a published version, but the `master` branch have already far away with the latest tag version, you can submit a PR on hotfix. And it will be cherry picked to `dev` branch if it is possible.
```
master
↑
dev <--- hotfix PR
↑
feature/bugfix PR
```
### Make Pull Requests
The code team will monitor all pull request, we run some code check and test on it. After all tests passed, we will accept this PR. But it won't merge to `master` branch at once, which have some delay.
Before submitting a pull request, please make sure the followings are done:
1. Fork the repo and create your branch from `master` or `hotfix`.
2. Update code or documentation if you have changed APIs.
3. Add the copyright notice to the top of any new files you've added.
4. Check your code lints and checkstyles.
5. Test and test again your code.
6. Now, you can submit your pull request on `dev` or `hotfix` branch.
## License
By contributing to WCDB, you agree that your contributions will be licensed
under its [BSD LICENSE](https://github.com/Tencent/wcdb/blob/master/LICENSE.txt)
================================================
FILE: ISSUE_TEMPLATE.md
================================================
### The language of WCDB
> e.g. Objective-C, Swift or Java
### The version of WCDB
> e.g. v1.0.5
### The platform of WCDB
> e.g. iOS, macOS or Android
### The installation of WCDB
> e.g. Cocoapods, Carthage, Maven, AAR Package or Git clone
### What's the issue?
> Post the outputs or screenshots for errors.
>
> Explain what you want by example or code **in English**.
================================================
FILE: LICENSE
================================================
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.
If you have downloaded a copy of the WCDB binary from Tencent, please note that
the WCDB binary is licensed under the BSD 3-Clause License.
If you have downloaded a copy of the WCDB source code from Tencent, please note
that WCDB source code is licensed under the BSD 3-Clause License, except for
the third-party components listed below which are subject to different license
terms. Your integration of WCDB into your own projects may require compliance
with the BSD 3-Clause License, as well as the other licenses applicable to the
third-party components included within WCDB.
A copy of the BSD 3-Clause License is included in this file.
Other dependencies and licenses:
Open Source Software Licensed Under the Apache License, Version 2.0:
The below software in this distribution may have been modified by THL A29 Limited
(“Tencent Modifications”).
All Tencent Modifications are Copyright (C) 2017 THL A29 Limited.
----------------------------------------------------------------------------------------
1. Android Source Code 4.3
Copyright (C) 2006-2011 The Android Open Source Project
Terms of the Apache License, Version 2.0:
---------------------------------------------------
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
“License” shall mean the terms and conditions for use, reproduction, and distribution
as defined by Sections 1 through 9 of this document.
“Licensor” shall mean the copyright owner or entity authorized by the copyright owner
that is granting the License.
“Legal Entity” shall mean the union of the acting entity and all other entities that
control, are controlled by, or are under common control with that entity. For the
purposes of this definition, “control” means (i) the power, direct or indirect, to
cause the direction or management of such entity, whether by contract or otherwise,
or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or
(iii) beneficial ownership of such entity.
“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions
granted by this License.
“Source” form shall mean the preferred form for making modifications, including but
not limited to software source code, documentation source, and configuration files.
“Object” form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
“Work” shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
“Derivative Works” shall mean any work, whether in Source or Object form, that is
based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
“Contribution” shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition, “submitted”
means any form of electronic, verbal, or written communication sent to the
Licensor or its representatives, including but not limited to communication on
electronic mailing lists, source code control systems, and issue tracking systems
that are managed by, or on behalf of, the Licensor for the purpose of discussing
and improving the Work, but excluding communication that is conspicuously marked
or otherwise designated in writing by the copyright owner as “Not a Contribution.”
“Contributor” shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this License,
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
Derivative Works of, publicly display, publicly perform, sublicense, and distribute
the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License,
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section) patent
license to make, have made, use, offer to sell, sell, import, and otherwise transfer
the Work, where such license applies only to those patent claims licensable by such
Contributor that are necessarily infringed by their Contribution(s) alone or by
combination of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution
incorporated within the Work constitutes direct or contributory patent infringement,
then any patent licenses granted to You under this License for that Work shall
terminate as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative
Works thereof in any medium, with or without modifications, and in Source or Object
form, provided that You meet the following conditions:
a) You must give any other recipients of the Work or Derivative Works a copy of this
License; and
b) You must cause any modified files to carry prominent notices stating that You
changed the files; and
c) You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form of
the Work, excluding those notices that do not pertain to any part of the Derivative
Works; and
d) If the Work includes a “NOTICE” text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the attribution
notices contained within such NOTICE file, excluding those notices that do not pertain
to any part of the Derivative Works, in at least one of the following places: within
a NOTICE text file distributed as part of the Derivative Works; within the Source
form or documentation, if provided along with the Derivative Works; or, within a
display generated by the Derivative Works, if and wherever such third-party notices
normally appear. The contents of the NOTICE file are for informational purposes only
and do not modify the License. You may add Your own attribution notices within
Derivative Works that You distribute, alongside or as an addendum to the NOTICE text
from the Work, provided that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution
intentionally submitted for inclusion in the Work by You to the Licensor shall be under
the terms and conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of any
separate license agreement you may have executed with Licensor regarding such
Contributions.
6. Trademarks. This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for reasonable and
customary use in describing the origin of the Work and reproducing the content of the
NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing,
Licensor provides the Work (and each Contributor provides its Contributions) on an
“AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for
determining the appropriateness of using or redistributing the Work and assume any risks
associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in tort
(including negligence), contract, or otherwise, unless required by applicable law (such
as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor
be liable to You for damages, including any direct, indirect, special, incidental, or
consequential damages of any character arising as a result of this License or out of the
use or inability to use the Work (including but not limited to damages for loss of
goodwill, work stoppage, computer failure or malfunction, or any and all other commercial
damages or losses), even if such Contributor has been advised of the possibility of such
damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative
Works thereof, You may choose to offer, and charge a fee for, acceptance of support,
warranty, indemnity, or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only on Your own behalf and
on Your sole responsibility, not on behalf of any other Contributor, and only if You agree
to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or
claims asserted against, such Contributor by reason of your accepting any such warranty or
additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate notice, with the
fields enclosed by brackets "[]" replaced with your own identifying information. (Don't
include the brackets!) The text should be enclosed in the appropriate comment syntax for
the file format. We also recommend that a file or class name and description of purpose be
included on the same "printed page" as the copyright notice for easier identification within
third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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.
Open Source Software Licensed Under Public Domain:
The below software in this distribution may have been modified by THL A29 Limited
(“Tencent Modifications”).
All Tencent Modifications are Copyright (C) 2017 THL A29 Limited.
----------------------------------------------------------------------------------------
1. SQLite 3.11.0
Open Source Software Licensed Under the OpenSSL License:
The below software in this distribution may have been modified by THL A29 Limited
(“Tencent Modifications”).
All Tencent Modifications are Copyright (C) 2017 THL A29 Limited.
----------------------------------------------------------------------------------------
1. OpenSSL 1.0.2j
Copyright (c) 1998-2016 The OpenSSL Project.
All rights reserved.
Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
All rights reserved.
Terms of the OpenSSL License:
---------------------------------------------------
LICENSE ISSUES:
--------------------------------------------------------------------
The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
OpenSSL License and the original SSLeay license apply to the toolkit.
See below for the actual license texts.
OpenSSL License:
--------------------------------------------------------------------
Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
3. All advertising materials mentioning features or use of this software must
display the following acknowledgment:
"This product includes software developed by the OpenSSL Project for use in the
OpenSSL Toolkit. (http://www.openssl.org/)"
4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to endorse or
promote products derived from this software without prior written permission. For
written permission, please contact openssl-core@openssl.org.
5. Products derived from this software may not be called "OpenSSL" nor may "OpenSSL"
appear in their names without prior written permission of the OpenSSL Project.
6. Redistributions of any form whatsoever must retain the following acknowledgment:
"This product includes software developed by the OpenSSL Project for use in the
OpenSSL Toolkit (http://www.openssl.org/)"
THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
====================================================================
* This product includes cryptographic software written by Eric Young (eay@cryptsoft.com).
This product includes software written by Tim Hudson (tjh@cryptsoft.com).
Original SSLeay License:
--------------------------------------------------------------------
Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
All rights reserved.
This package is an SSL implementation written by Eric Young (eay@cryptsoft.com).
The implementation was written so as to conform with Netscapes SSL.
This library is free for commercial and non-commercial use as long as the following
conditions are aheared to. The following conditions apply to all code found in this
distribution, be it the RC4, RSA, lhash, DES, etc., code; not just the SSL code.
The SSL documentation included with this distribution is covered by the same copyright
terms except that the holder is Tim Hudson (tjh@cryptsoft.com).
Copyright remains Eric Young's, and as such any Copyright notices in the code are not
to be removed. If this package is used in a product, Eric Young should be given
attribution as the author of the parts of the library used. This can be in the form
of a textual message at program startup or in documentation (online or textual)
provided with the package.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
3. All advertising materials mentioning features or use of this software must display
the following acknowledgement:" This product includes cryptographic software written
by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' can be left out if the
rouines from the library being used are not cryptographic related :-).
4. If you include any Windows specific code (or a derivative thereof) from the apps
directory (application code) you must include an acknowledgement: "This product includes
software written by Tim Hudson (tjh@cryptsoft.com)"
THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
The licence and distribution terms for any publically available version or derivative of
this code cannot be changed. i.e. this code cannot simply be copied and put under another
distribution licence [including the GNU Public Licence.]
Open Source Software Licensed Under the ICU License:
----------------------------------------------------------------------------------------
1. ICU4C 50.1
Copyright (c) 1995-2012 International Business Machines Corporation and others
All rights reserved.
Terms of the ICU License:
--------------------------------------------------------------------
ICU License - ICU 1.8.1 and later
COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1995-2012 International Business Machines Corporation and others
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, provided that the above copyright
notice(s) and this permission notice appear in all copies of the Software and that both
the above copyright notice(s) and this permission notice appear in supporting
documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in
advertising or otherwise to promote the sale, use or other dealings in this Software
without prior written authorization of the copyright holder.
All trademarks and registered trademarks mentioned herein are the property of their
respective owners.
Open Source Software Licensed Under the BSD 3-Clause License:
The below software in this distribution may have been modified by THL A29 Limited
(“Tencent Modifications”).
All Tencent Modifications are Copyright (C) 2017 THL A29 Limited.
----------------------------------------------------------------------------------------
1. SQLCipher 3.4.0
Copyright (c) 2008, ZETETIC LLC
All rights reserved.
Terms of the BSD 3-Clause License:
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
l Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
l Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
l Neither the name of [copyright holder] nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: Package.swift
================================================
// swift-tools-version: 5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "WCDBSwift",
platforms: [
.macOS(.v10_13),
.watchOS(.v4),
.tvOS(.v12),
.iOS(.v12)],
products: [
.library(name: "WCDBSwift", targets: ["WCDBSwift"]),
.library(name: "WCDBSwiftDynamic", type: .dynamic, targets: ["WCDBSwift"]),
],
dependencies: [
.package(url: "https://github.com/Tencent/sqlcipher", .exactItem("1.4.7"))
],
targets: [
.target(
name: "objc-core",
path: "src/objc/core",
sources: ["WCTFileManager.mm", "WCTFoundation.mm", "WCTFTSTokenizerUtil.mm", "WCTOperationQueue.mm"],
publicHeadersPath:"",
cSettings: [
// .headerSearchPath("../../**"),
.headerSearchPath("../../bridge"),
.headerSearchPath("../../objc"),
.headerSearchPath("../../bridge/objcbridge"),
.headerSearchPath("../../bridge/cppbridge"),
.headerSearchPath("../../bridge/winqbridge"),
.headerSearchPath("../../bridge/base"),
.headerSearchPath("../../bridge/winqbridge/statement"),
.headerSearchPath("../../bridge/winqbridge/identifier"),
.headerSearchPath("../../common/core"),
.headerSearchPath("../../common/platform"),
.headerSearchPath("../../common/winq"),
.headerSearchPath("../../common/repair"),
.headerSearchPath("../../common/base"),
.headerSearchPath("../../common/utility"),
.headerSearchPath("../../common/core/config"),
.headerSearchPath("../../common/core/assemble"),
.headerSearchPath("../../common/core/vacuum"),
.headerSearchPath("../../common/core/cipher"),
.headerSearchPath("../../common/core/sqlite"),
.headerSearchPath("../../common/core/function"),
.headerSearchPath("../../common/core/fts"),
.headerSearchPath("../../common/core/operate"),
.headerSearchPath("../../common/core/compression"),
.headerSearchPath("../../common/core/integrity"),
.headerSearchPath("../../common/core/migration"),
.headerSearchPath("../../common/core/function/scalar"),
.headerSearchPath("../../common/core/fts/auxfunction"),
.headerSearchPath("../../common/core/fts/tokenizer"),
.headerSearchPath("../../common/winq/extension"),
.headerSearchPath("../../common/winq/statement"),
.headerSearchPath("../../common/winq/identifier"),
.headerSearchPath("../../common/winq/syntax"),
.headerSearchPath("../../common/winq/syntax/stmt"),
.headerSearchPath("../../common/winq/syntax/const"),
.headerSearchPath("../../common/winq/syntax/identifier"),
.headerSearchPath("../../common/repair/mechanic"),
.headerSearchPath("../../common/repair/parse"),
.headerSearchPath("../../common/repair/basic"),
.headerSearchPath("../../common/repair/sqlite"),
.headerSearchPath("../../common/repair/crawl"),
.headerSearchPath("../../common/repair/factory"),
.headerSearchPath("../../common/repair/utility"),
.headerSearchPath("../../objc/transaction"),
.headerSearchPath("../../objc/database"),
.headerSearchPath("../../objc/monitor"),
.headerSearchPath("../../objc/core"),
.headerSearchPath("../../objc/handle"),
.headerSearchPath("../../objc/bridge"),
.headerSearchPath("../../objc/statement"),
.headerSearchPath("../../objc/fts"),
.headerSearchPath("../../objc/chaincall"),
.headerSearchPath("../../objc/table"),
.headerSearchPath("../../objc/compression"),
.headerSearchPath("../../objc/orm"),
.headerSearchPath("../../objc/convenient"),
.headerSearchPath("../../objc/migration"),
.headerSearchPath("../../objc/builtin"),
.headerSearchPath("../../objc/orm/accessor"),
.headerSearchPath("../../objc/orm/binding"),
.headerSearchPath("../../objc/orm/macro"),
.headerSearchPath("../../objc/orm/coding")
],
linkerSettings: [
.linkedFramework("UIKit", .when(platforms: [.iOS])),
]
),
.target(
name: "common",
dependencies: ["sqlcipher", .target(name: "objc-core")],
path: "src/common",
exclude: [
"repair/sqlite",
"platform/WCTFileManager.cpp",
"platform/WCTOperationQueue.cpp",
],
publicHeadersPath:"",
cSettings: [
.define("SQLITE_WCDB", to: "1"),
.define("SQLITE_WCDB_LOCK_HOOK", to: "1"),
.define("SQLITE_WCDB_CHECKPOINT_HANDLER", to: "1"),
.define("SQLITE_WCDB_SUSPEND", to: "1"),
.define("SQLITE_WCDB_IMPROVED_CHECKPOINT", to: "1"),
.define("SQLITE_HAS_CODEC"),
.define("SQLITE_DEFAULT_PAGE_SIZE", to: "4096"),
.define("SQLITE_DEFAULT_SYNCHRONOUS", to: "1"),
.define("SQLITE_DEFAULT_WAL_SYNCHRONOUS", to: "1"),
.define("SQLITE_DEFAULT_LOCKING_MODE", to: "0"),
.define("SQLITE_DEFAULT_WAL_AUTOCHECKPOINT", to: "0"),
// .headerSearchPath("**")
.headerSearchPath("core"),
.headerSearchPath("platform"),
.headerSearchPath("winq"),
.headerSearchPath("repair"),
.headerSearchPath("base"),
.headerSearchPath("utility"),
.headerSearchPath("core/config"),
.headerSearchPath("core/assemble"),
.headerSearchPath("core/vacuum"),
.headerSearchPath("core/cipher"),
.headerSearchPath("core/sqlite"),
.headerSearchPath("core/function"),
.headerSearchPath("core/fts"),
.headerSearchPath("core/operate"),
.headerSearchPath("core/compression"),
.headerSearchPath("core/integrity"),
.headerSearchPath("core/migration"),
.headerSearchPath("core/function/scalar"),
.headerSearchPath("core/fts/auxfunction"),
.headerSearchPath("core/fts/tokenizer"),
.headerSearchPath("winq/extension"),
.headerSearchPath("winq/statement"),
.headerSearchPath("winq/identifier"),
.headerSearchPath("winq/syntax"),
.headerSearchPath("winq/syntax/stmt"),
.headerSearchPath("winq/syntax/const"),
.headerSearchPath("winq/syntax/identifier"),
.headerSearchPath("repair/mechanic"),
.headerSearchPath("repair/parse"),
.headerSearchPath("repair/basic"),
.headerSearchPath("repair/sqlite"),
.headerSearchPath("repair/crawl"),
.headerSearchPath("repair/factory"),
.headerSearchPath("repair/utility")
],
linkerSettings: [
.linkedLibrary("z"),
]
),
.target(
name: "bridge",
dependencies: [.target(name: "common")],
path: "src/bridge",
exclude: [
"tests",
],
cSettings: [
// .headerSearchPath("../**")
.headerSearchPath("../bridge"),
.headerSearchPath("../objc"),
.headerSearchPath("../bridge/objcbridge"),
.headerSearchPath("../bridge/cppbridge"),
.headerSearchPath("../bridge/winqbridge"),
.headerSearchPath("../bridge/base"),
.headerSearchPath("../bridge/winqbridge/statement"),
.headerSearchPath("../bridge/winqbridge/identifier"),
.headerSearchPath("../common/core"),
.headerSearchPath("../common/platform"),
.headerSearchPath("../common/winq"),
.headerSearchPath("../common/repair"),
.headerSearchPath("../common/base"),
.headerSearchPath("../common/utility"),
.headerSearchPath("../common/core/config"),
.headerSearchPath("../common/core/assemble"),
.headerSearchPath("../common/core/vacuum"),
.headerSearchPath("../common/core/cipher"),
.headerSearchPath("../common/core/sqlite"),
.headerSearchPath("../common/core/function"),
.headerSearchPath("../common/core/fts"),
.headerSearchPath("../common/core/operate"),
.headerSearchPath("../common/core/compression"),
.headerSearchPath("../common/core/integrity"),
.headerSearchPath("../common/core/migration"),
.headerSearchPath("../common/core/function/scalar"),
.headerSearchPath("../common/core/fts/auxfunction"),
.headerSearchPath("../common/core/fts/tokenizer"),
.headerSearchPath("../common/winq/extension"),
.headerSearchPath("../common/winq/statement"),
.headerSearchPath("../common/winq/identifier"),
.headerSearchPath("../common/winq/syntax"),
.headerSearchPath("../common/winq/syntax/stmt"),
.headerSearchPath("../common/winq/syntax/const"),
.headerSearchPath("../common/winq/syntax/identifier"),
.headerSearchPath("../common/repair/mechanic"),
.headerSearchPath("../common/repair/parse"),
.headerSearchPath("../common/repair/basic"),
.headerSearchPath("../common/repair/sqlite"),
.headerSearchPath("../common/repair/crawl"),
.headerSearchPath("../common/repair/factory"),
.headerSearchPath("../common/repair/utility"),
.headerSearchPath("../objc/transaction"),
.headerSearchPath("../objc/database"),
.headerSearchPath("../objc/monitor"),
.headerSearchPath("../objc/core"),
.headerSearchPath("../objc/handle"),
.headerSearchPath("../objc/bridge"),
.headerSearchPath("../objc/statement"),
.headerSearchPath("../objc/fts"),
.headerSearchPath("../objc/chaincall"),
.headerSearchPath("../objc/table"),
.headerSearchPath("../objc/compression"),
.headerSearchPath("../objc/orm"),
.headerSearchPath("../objc/convenient"),
.headerSearchPath("../objc/migration"),
.headerSearchPath("../objc/builtin"),
.headerSearchPath("../objc/orm/accessor"),
.headerSearchPath("../objc/orm/binding"),
.headerSearchPath("../objc/orm/macro"),
.headerSearchPath("../objc/orm/coding")
]
),
.target(
name: "WCDBSwift",
dependencies: [.target(name: "bridge")],
path: "src/swift",
exclude: [
"tests"
],
publicHeadersPath: ".",
cSettings: [
// .headerSearchPath("../bridge/**")
.headerSearchPath("../bridge"),
.headerSearchPath("../bridge/objcbridge"),
.headerSearchPath("../bridge/cppbridge"),
.headerSearchPath("../bridge/winqbridge"),
.headerSearchPath("../bridge/base"),
.headerSearchPath("../bridge/winqbridge/statement"),
.headerSearchPath("../bridge/winqbridge/identifier")
]
)
],
cLanguageStandard: .c11,
cxxLanguageStandard: .cxx14
)
================================================
FILE: README.md
================================================
# WCDB
[](https://github.com/Tencent/wcdb/pulls)
[](https://github.com/Tencent/wcdb/releases)
[](https://github.com/Tencent/wcdb/wiki)[](https://github.com/Tencent/wcdb/wiki)
中文版本请参看[这里][wcdb-wiki]
WCDB is an **efficient**, **complete**, **easy-to-use** mobile database framework used in the WeChat application. It's based on SQLite and SQLCipher, and supports five languages: C++, Java, Kotlin, Swift and Objective-C.
# Feature
## **Easy-to-use**
* **ORM** (Object Relational Mapping): WCDB provides a flexible, easy-to-use ORM for creating tables, indices and constraints, as well as CRUD through C++/Java/Kotlin/Swift/Objc objects.
* **WINQ** (WCDB language integrated query): WINQ is a native data querying capability which frees developers from writing glue code to concatenate SQL query strings.
With ORM and WINQ, you can insert, update, query and delete objects from database in one line code:
```c++
// C++
database.insertObjects<Sample>(Sample(1, "text"), myTable);
database.updateRow("text2", WCDB_FIELD(Sample::content), myTable, WCDB_FIELD(Sample::id) == 1);
auto objects = database.getAllObjects<Sample>(myTable, WCDB_FIELD(Sample::id) > 0);
database.deleteObjects(myTable, WCDB_FIELD(Sample::id) == 1);
```
```java
// Java
database.insertObject(new Sample(1, "text"), DBSample.allFields(), myTable);
database.updateValue("text2", DBSample.content, myTable, DBSample.id.eq(1));
List<Sample> objects = database.getAllObjects(DBSample.allFields(), myTable, DBSample.id.gt(0));
database.deleteObjects(myTable, DBSample.id.eq(1));
```
```kotlin
// Kotlin
database.insertObject<Sample>(Sample(1, "text"), DBSample.allFields(), myTable)
database.updateValue("text2", DBSample.content, myTable, DBSample.id.eq(1))
val objects = database.getAllObjects<Sample>(DBSample.allFields(), myTable, DBSample.id.gt(0))
database.deleteObjects(myTable, DBSample.id.eq(1))
```
```swift
// Swift
try database.insert(Sample(id:1, content:"text"), intoTable: myTable)
try database.update(table: myTable,
on: Sample.Properties.content,
with: "text2"
where:Sample.Properties.id == 1)
let objects: [Sample] = try database.getObjects(fromTable: myTable,
where: Sample.Properties.id > 0)
try database.delete(fromTable: myTable where: Sample.Properties.id == 1)
```
```objective-c
// Objc
[database insertObject:sample intoTable:myTable];
[database updateTable:myTable
setProperty:Sample.content
toValue:@"text2"
where:Sample.id == 1];
NSArray* objects = [database getObjectsOfClass:Sample.class
fromTable:myTable
where:Sample.id > 0];
[database deleteFromTable:myTable where:Sample.id == 1];
```
## **Efficient**
Through the framework layer and sqlcipher source optimization, WCDB have more efficient performance.
* **Multi-threaded concurrency**: WCDB supports concurrent read-read and read-write access via connection pooling.
* **Deeply optimized**: WCDB has deeply optimized the source code and configuration of SQLite to adapt to the development scenarios of mobile terminals. At the same time, WCDB has also been optimized for common time-consuming scenarios, such as writing data in batches.
## **Complete**
WCDB summarizes common problems in practice to provide a more complete development experience for database development:
* **Encryption Support**: WCDB supports database encryption via [SQLCipher][sqlcipher].
* **Corruption recovery**: WCDB provides a built-in repair kit for database corruption recovery.
* **Anti-injection**: WCDB provides a built-in protection from SQL injection.
* **Database model upgrade**: The database model is bound to the class definition, so that the addition, deletion and modification of database fields are consistent with the definition of class variables.
* **Full-text search**: WCDB provides an easy-to-use full-text search interface and includes tokenizers for multiple languages.
* **Data Migration**: WCDB supports to migrate data from one databasse to another with simple configuration. And developers don't need to care about the intermediate status and progress of the migration.
* **Data Compression**: WCDB supports to compress content via [Zstd][Zstd] within specific fields of a database table through a simple configuration. Once configured, the details of data compression and decompression become transparent to developers, and WCDB can automatically compress existing data.
## **Compatibility**
WCDB has interfaces in five languages: C++, Java, Kotlin, Swift, and Objc. Interfaces in different languages share the same underlying logic. The code structure of WCDB is shown in the figure below:
<div align=center><img style="display:inline-block" src="https://raw.githubusercontent.com/wiki/Tencent/wcdb/assets/common/CodeStructure-English.png" width = 600/></div>
Under such architecture, WCDB in different languages can have the same interface structure and interface capabilities. In one project, you can write database code in different languages with one WCDB. Database logic in different languages will not conflict. Some global interfaces such as error monitoring can work on database logic in different languages at the same time.
# Build and Install
Following wikies contain the detailed instructions about building and installing of WCDB.
* [Building and Installing of WCDB C++][wcdb-cpp-build-and-install]
* [Building and Installing of WCDB Java/Kotlin][wcdb-java-build-and-install]
* [Building and Installing of WCDB Swift][wcdb-swift-build-and-install]
* [Building and Installing of WCDB Objc][wcdb-objc-build-and-install]
# Tutorials
Tutorials of different languages can be found below:
* [Tutorials for WCDB C++][wcdb-cpp-tutorials]
* [Tutorials for WCDB Java/Kotlin][wcdb-java-tutorials]
* [Tutorials for WCDB Swift][wcdb-swift-tutorials]
* [Tutorials for WCDB Objc][wcdb-objc-tutorials]
# Contributing
If you are interested in contributing, check out the [CONTRIBUTING.md], also join our [Tencent OpenSource Plan](https://opensource.tencent.com/contribution).
WCDB 正式加入[TDS 腾讯端服务产品联盟](https://tds-union.qq.com/),携手联盟其他成员,共同致力于构建开放共赢的大前端技术产品生态。
# 信息公示
* 开发者: 深圳市腾讯计算机系统有限公司
* [WCDB 个人信息保护规则][wcdb-privacy]
[wcdb-wiki]: https://github.com/Tencent/wcdb/wiki
[wcdb-docs-android]: https://tencent.github.io/wcdb/references/android/index.html
[sqlcipher]:https://www.zetetic.net/sqlcipher/
[Zstd]:https://github.com/facebook/zstd
[room]: https://developer.android.com/topic/libraries/architecture/room
[room-codelabs]: https://codelabs.developers.google.com/codelabs/android-room-with-a-view
[wcdb-cpp-build-and-install]: https://github.com/Tencent/wcdb/wiki/C++-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%85%BC%E5%AE%B9%E6%80%A7
[wcdb-java-build-and-install]:https://github.com/Tencent/wcdb/wiki/Java%7CKotlin-%e5%ae%89%e8%a3%85%e4%b8%8e%e5%85%bc%e5%ae%b9%e6%80%a7
[wcdb-objc-build-and-install]:https://github.com/Tencent/wcdb/wiki/Objc-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%85%BC%E5%AE%B9%E6%80%A7
[wcdb-swift-build-and-install]: https://github.com/Tencent/wcdb/wiki/Swift-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%85%BC%E5%AE%B9%E6%80%A7
[wcdb-cpp-tutorials]:https://github.com/Tencent/wcdb/wiki/C++-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8
[wcdb-java-tutorials]:https://github.com/Tencent/wcdb/wiki/Java%7CKotlin-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8
[wcdb-swift-tutorials]:https://github.com/Tencent/wcdb/wiki/Swift-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8
[wcdb-objc-tutorials]:https://github.com/Tencent/wcdb/wiki/Objc-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8
[Benchmark-iOS]: https://github.com/Tencent/wcdb/wiki/WCDB-iOS-benchmark
[wcdb-privacy]: https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/GepveGs4q4eAgpoh
================================================
FILE: VERSION
================================================
2.1.15
================================================
FILE: WCDB.cpp.podspec
================================================
# pod repo update
# pod repo remove trunk
# pod lib lint --verbose --skip-import-validation --allow-warnings WCDB.cpp.podspec --sources='https://github.com/CocoaPods/Specs.git'
# pod trunk push WCDB.cpp.podspec --verbose --skip-import-validation --allow-warnings
Pod::Spec.new do |wcdb|
wcdb.name = "WCDB.cpp"
wcdb.version = "2.1.15"
wcdb.summary = "WCDB is a cross-platform database framework developed by WeChat."
wcdb.description = <<-DESC
The WeChat Database, for C++. (If you want to use WCDB for Swift or Objective-C, see the "WCDB.swift" pod or "WCDB.objc" pod. If you want to use WCDB for C++/Objc/Swift in one project, see the "WCDB" pod)
WCDB is an efficient, complete, easy-to-use mobile database framework used in the WeChat application.
It can be a replacement for Core Data, SQLite & FMDB.
DESC
wcdb.homepage = "https://github.com/Tencent/wcdb"
wcdb.license = { :type => "BSD", :file => "LICENSE" }
wcdb.author = { "Qiuwen-Chen" => "qwchen2008@163.com" }
wcdb.module_name = "WCDBCpp"
wcdb.ios.deployment_target = "11.0"
wcdb.osx.deployment_target = "10.13"
wcdb.watchos.deployment_target = "6.0"
wcdb.tvos.deployment_target = "12.4"
wcdb.source = { :git => "https://github.com/Tencent/wcdb.git", :tag => "v#{wcdb.version}" }
wcdb.public_header_files = [
"src/cpp/WCDBCpp.h",
"src/cpp/**/*.{h,hpp}",
"src/common/winq/*.{h,hpp}",
"src/common/winq/**/*.{h,hpp}",
"src/common/platform/SysTypes.h",
"src/common/utility/Shadow.hpp",
"src/common/utility/Macro.h",
"src/common/utility/CaseInsensitiveList.hpp",
"src/common/core/function/scalar/ScalarFunctionModule.hpp",
"src/common/core/function/scalar/ScalarFunctionTemplate.hpp",
"src/common/core/fts/FTSConst.h",
"src/common/core/fts/tokenizer/TokenizerModule.hpp",
"src/common/core/fts/tokenizer/TokenizerModuleTemplate.hpp",
"src/common/core/fts/tokenizer/BaseTokenizerUtil.hpp",
"src/common/core/fts/tokenizer/PinyinTokenizer.hpp",
"src/common/core/fts/tokenizer/OneOrBinaryTokenizer.hpp",
"src/common/core/fts/auxfunction/FTS5AuxiliaryFunctionTemplate.hpp",
"src/common/core/fts/auxfunction/AuxiliaryFunctionModule.hpp",
"src/common/core/fts/auxfunction/SubstringMatchInfo.hpp",
"src/common/core/fts/FTSError.hpp",
"src/common/core/RecyclableHandle.hpp",
"src/common/core/Tag.hpp",
"src/common/base/Recyclable.hpp",
"src/common/base/SharedThreadedErrorProne.hpp",
"src/common/base/StringView.hpp",
"src/common/base/WCDBOptional.hpp",
"src/common/base/WCDBError.hpp",
"src/common/base/Data.hpp",
"src/common/base/UnsafeData.hpp",
"src/common/base/MemberPointer.hpp"
]
wcdb.source_files = [
"src/common/**/*.{h,hpp,c,cpp}",
"src/cpp/**/*.{h,hpp,c,cpp}",
"src/objc/core/WCTFileManager.mm",
"src/objc/core/WCTOperationQueue.mm",
"src/objc/core/WCTFoundation.h",
"src/objc/core/WCTFoundation.mm"
]
wcdb.exclude_files = [
"src/cpp/tests/**/*.{h,hpp,c,cpp}",
"src/common/platform/WCTFileManager.cpp",
"src/common/platform/WCTOperationQueue.cpp",
]
wcdb.frameworks = "CoreFoundation", "Security", "Foundation"
wcdb.ios.frameworks = "UIKit"
wcdb.libraries = "z", "c++"
wcdb.requires_arc = true
wcdb.pod_target_xcconfig = {
"GCC_PREPROCESSOR_DEFINITIONS" => "SQLITE_WCDB=1 " +
"SQLITE_WCDB_LOCK_HOOK=1 " +
"SQLITE_WCDB_CHECKPOINT_HANDLER=1 " +
"SQLITE_WCDB_SUSPEND=1 " +
"SQLITE_WCDB_IMPROVED_CHECKPOINT=1 " +
"SQLITE_HAS_CODEC " +
"SQLITE_DEFAULT_PAGE_SIZE=4096 " +
"SQLITE_DEFAULT_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_WAL_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_LOCKING_MODE=0 " +
"SQLITE_DEFAULT_WAL_AUTOCHECKPOINT=0",
"HEADER_SEARCH_PATHS" => "${PODS_ROOT}/WCDB",
"LIBRARY_SEARCH_PATHS[sdk=macosx*]" => "$(SDKROOT)/usr/lib/system",
"CLANG_CXX_LANGUAGE_STANDARD" => "gnu++14",
"CLANG_CXX_LIBRARY" => "libc++",
"GCC_C_LANGUAGE_STANDARD" => "gnu11",
"VALID_ARCHS" => "arm64e arm64 x86_64",
"VALID_ARCHS[sdk=watchos*]" => "arm64_32 arm64 x86_64",
"OTHER_CFLAGS" => "-fvisibility-inlines-hidden",
"OTHER_CPLUSPLUSFLAGS" => "-fvisibility-inlines-hidden",
}
wcdb.user_target_xcconfig = {
"VALID_ARCHS" => "arm64e arm64 x86_64",
"VALID_ARCHS[sdk=watchos*]" => "arm64_32 armv7k",
}
wcdb.header_dir = "WCDB"
wcdb.dependency 'WCDBOptimizedSQLCipher', '1.4.8'
end
================================================
FILE: WCDB.objc.podspec
================================================
# pod repo update
# pod repo remove trunk
# pod lib lint --verbose --skip-import-validation --allow-warnings WCDB.objc.podspec --sources='https://github.com/CocoaPods/Specs.git'
# pod trunk push WCDB.objc.podspec --verbose --skip-import-validation --allow-warnings
Pod::Spec.new do |wcdb|
wcdb.name = "WCDB.objc"
wcdb.version = "2.1.15"
wcdb.summary = "WCDB is a cross-platform database framework developed by WeChat."
wcdb.description = <<-DESC
The WeChat Database, for Objective-C. (If you want to use WCDB for Swift or C++, see the "WCDB.swift" pod or "WCDB.cpp" pod. If you want to use WCDB for C++/Objc/Swift in one project, see the "WCDB" pod)
WCDB is an efficient, complete, easy-to-use mobile database framework used in the WeChat application.
It can be a replacement for Core Data, SQLite & FMDB.
DESC
wcdb.homepage = "https://github.com/Tencent/wcdb"
wcdb.license = { :type => "BSD", :file => "LICENSE" }
wcdb.author = { "Qiuwen-Chen" => "qwchen2008@163.com" }
wcdb.module_name = "WCDBObjc"
wcdb.ios.deployment_target = "11.0"
wcdb.osx.deployment_target = "10.13"
wcdb.watchos.deployment_target = "7.0"
wcdb.tvos.deployment_target = "12.4"
wcdb.source = { :git => "https://github.com/Tencent/wcdb.git", :tag => "v#{wcdb.version}" }
wcdb.public_header_files = [
"src/objc/WCDBObjc.h",
"src/objc/Interface.h",
"src/objc/core/*.{h,hpp}",
"src/objc/builtin/*.{h,hpp}",
"src/objc/statement/WCTPreparedStatement.h",
"src/objc/migration/WCTDatabase+Migration.h",
"src/objc/migration/WCTMigrationInfo.h",
"src/objc/compression/WCTDatabase+Compression.h",
"src/objc/compression/WCTCompressionInfo.h",
"src/objc/transaction/*.{h,hpp}",
"src/objc/handle/WCTDatabase+Handle.h",
"src/objc/handle/WCTHandle.h",
"src/objc/handle/WCTCancellationSignal.h",
"src/objc/fts/*.{h,hpp}",
"src/objc/monitor/WCTError.h",
"src/objc/monitor/WCTDatabase+Monitor.h",
"src/objc/monitor/WCTPerformanceInfo.h",
"src/objc/chaincall/WCTInsert.h",
"src/objc/chaincall/WCTDelete.h",
"src/objc/chaincall/WCTUpdate.h",
"src/objc/chaincall/WCTSelectable.h",
"src/objc/chaincall/WCTSelect.h",
"src/objc/chaincall/WCTMultiSelect.h",
"src/objc/chaincall/WCTHandle+ChainCall.h",
"src/objc/chaincall/WCTTable+ChainCall.h",
"src/objc/chaincall/WCTDatabase+ChainCall.h",
"src/objc/chaincall/WCTChainCall.h",
"src/objc/convenient/*.{h,hpp}",
"src/objc/database/WCTDatabase.h",
"src/objc/database/WCTDatabase+File.h",
"src/objc/database/WCTDatabase+Repair.h",
"src/objc/database/WCTDatabase+Config.h",
"src/objc/database/WCTDatabase+Memory.h",
"src/objc/orm/*.{h,hpp}",
"src/objc/orm/**/*.{h,hpp}",
"src/objc/table/WCTTable.h",
"src/objc/table/WCTTableProtocol.h",
"src/objc/table/WCTTable+Table.h",
"src/objc/table/WCTDatabase+Table.h",
"src/objc/table/WCTHandle+Table.h",
"src/objc/bridge/WCTBridgeProperty.h",
"src/objc/bridge/WCTBridgeProperty+Cpp.h",
"src/common/winq/*.{h,hpp}",
"src/common/winq/**/*.{h,hpp}",
"src/common/platform/SysTypes.h",
"src/common/utility/Shadow.hpp",
"src/common/utility/Macro.h",
"src/common/utility/CaseInsensitiveList.hpp",
"src/common/core/function/scalar/ScalarFunctionModule.hpp",
"src/common/core/function/scalar/ScalarFunctionTemplate.hpp",
"src/common/core/fts/tokenizer/TokenizerModule.hpp",
"src/common/core/fts/tokenizer/TokenizerModuleTemplate.hpp",
"src/common/core/fts/tokenizer/BaseTokenizerUtil.hpp",
"src/common/core/fts/tokenizer/PinyinTokenizer.hpp",
"src/common/core/fts/tokenizer/OneOrBinaryTokenizer.hpp",
"src/common/core/fts/auxfunction/FTS5AuxiliaryFunctionTemplate.hpp",
"src/common/core/fts/auxfunction/AuxiliaryFunctionModule.hpp",
"src/common/core/fts/auxfunction/SubstringMatchInfo.hpp",
"src/common/core/fts/FTSError.hpp",
"src/common/core/RecyclableHandle.hpp",
"src/common/core/Tag.hpp",
"src/common/base/Recyclable.hpp",
"src/common/base/SharedThreadedErrorProne.hpp",
"src/common/base/StringView.hpp",
"src/common/base/WCDBOptional.hpp",
"src/common/base/WCDBError.hpp",
"src/common/base/Data.hpp",
"src/common/base/UnsafeData.hpp",
"src/common/base/MemberPointer.hpp",
"src/common/base/Assertion.hpp",
"src/common/base/Console.hpp",
"src/common/utility/Enum.hpp"
]
wcdb.source_files = [
"src/common/**/*.{h,hpp,c,cpp}",
"src/objc/**/*.{h,hpp,c,cpp,m,mm}",
]
wcdb.exclude_files = [
"src/common/platform/WCTFileManager.cpp",
"src/common/platform/WCTOperationQueue.cpp",
"src/objc/tests/**/*.{h,hpp,c,cpp,m,mm}"
]
wcdb.frameworks = "CoreFoundation", "Security", "Foundation"
wcdb.ios.frameworks = "UIKit"
wcdb.libraries = "z", "c++"
wcdb.requires_arc = true
wcdb.pod_target_xcconfig = {
"GCC_PREPROCESSOR_DEFINITIONS" => "SQLITE_WCDB=1 " +
"SQLITE_WCDB_LOCK_HOOK=1 " +
"SQLITE_WCDB_CHECKPOINT_HANDLER=1 " +
"SQLITE_WCDB_SUSPEND=1 " +
"SQLITE_WCDB_IMPROVED_CHECKPOINT=1 " +
"SQLITE_HAS_CODEC " +
"SQLITE_DEFAULT_PAGE_SIZE=4096 " +
"SQLITE_DEFAULT_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_WAL_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_LOCKING_MODE=0 " +
"SQLITE_DEFAULT_WAL_AUTOCHECKPOINT=0",
"HEADER_SEARCH_PATHS" => "${PODS_ROOT}/WCDB",
"LIBRARY_SEARCH_PATHS[sdk=macosx*]" => "$(SDKROOT)/usr/lib/system",
"CLANG_CXX_LANGUAGE_STANDARD" => "gnu++14",
"CLANG_CXX_LIBRARY" => "libc++",
"GCC_C_LANGUAGE_STANDARD" => "gnu11",
"VALID_ARCHS" => "arm64e arm64 x86_64",
"VALID_ARCHS[sdk=watchos*]" => "arm64_32 arm64 x86_64",
"OTHER_CFLAGS" => "-fvisibility-inlines-hidden",
"OTHER_CPLUSPLUSFLAGS" => "-fvisibility-inlines-hidden",
}
wcdb.header_dir = "WCDB"
wcdb.dependency 'WCDBOptimizedSQLCipher', '1.4.8'
end
================================================
FILE: WCDB.podspec
================================================
# pod repo update
# pod repo remove trunk
# pod lib lint --verbose --skip-import-validation --allow-warnings WCDB.podspec --sources='https://github.com/CocoaPods/Specs.git'
# pod trunk push --verbose --allow-warnings WCDB.podspec --skip-import-validation
Pod::Spec.new do |wcdb|
wcdb.name = "WCDB"
wcdb.version = "2.1.15"
wcdb.summary = "WCDB is a cross-platform database framework developed by WeChat."
wcdb.description = <<-DESC
The WeChat Database, for Objc/Swift/C++. (If you want to use WCDB for Objc/Swift/C++ separately, see the "WCDB.objc", "WCDB.swift" or "WCDB.cpp" pod.)
WCDB is an efficient, complete, easy-to-use mobile database framework used in the WeChat application.
It can be a replacement for Core Data, SQLite & FMDB.
DESC
wcdb.homepage = "https://github.com/Tencent/wcdb"
wcdb.license = { :type => "BSD", :file => "LICENSE" }
wcdb.author = { "Qiuwen-Chen" => "qwchen2008@163.com" }
wcdb.module_name = "WCDB"
wcdb.ios.deployment_target = "11.0"
wcdb.osx.deployment_target = "10.13"
wcdb.watchos.deployment_target = "7.0"
wcdb.tvos.deployment_target = "12.4"
wcdb.source = { :git => "https://github.com/Tencent/wcdb.git", :tag => "v#{wcdb.version}" }
wcdb.public_header_files = [
"src/WCDB.h",
"src/objc/WCDBObjc.h",
"src/objc/Interface.h",
"src/objc/core/*.{h,hpp}",
"src/objc/builtin/*.{h,hpp}",
"src/objc/statement/WCTPreparedStatement.h",
"src/objc/migration/WCTDatabase+Migration.h",
"src/objc/migration/WCTMigrationInfo.h",
"src/objc/compression/WCTDatabase+Compression.h",
"src/objc/compression/WCTCompressionInfo.h",
"src/objc/transaction/*.{h,hpp}",
"src/objc/handle/WCTDatabase+Handle.h",
"src/objc/handle/WCTHandle.h",
"src/objc/handle/WCTCancellationSignal.h",
"src/objc/fts/*.{h,hpp}",
"src/objc/monitor/WCTError.h",
"src/objc/monitor/WCTDatabase+Monitor.h",
"src/objc/monitor/WCTPerformanceInfo.h",
"src/objc/chaincall/WCTInsert.h",
"src/objc/chaincall/WCTDelete.h",
"src/objc/chaincall/WCTUpdate.h",
"src/objc/chaincall/WCTSelectable.h",
"src/objc/chaincall/WCTSelect.h",
"src/objc/chaincall/WCTMultiSelect.h",
"src/objc/chaincall/WCTHandle+ChainCall.h",
"src/objc/chaincall/WCTTable+ChainCall.h",
"src/objc/chaincall/WCTDatabase+ChainCall.h",
"src/objc/chaincall/WCTChainCall.h",
"src/objc/convenient/*.{h,hpp}",
"src/objc/database/WCTDatabase.h",
"src/objc/database/WCTDatabase+File.h",
"src/objc/database/WCTDatabase+Repair.h",
"src/objc/database/WCTDatabase+Config.h",
"src/objc/database/WCTDatabase+Memory.h",
"src/objc/orm/*.{h,hpp}",
"src/objc/orm/**/*.{h,hpp}",
"src/objc/table/WCTTable.h",
"src/objc/table/WCTTableProtocol.h",
"src/objc/table/WCTTable+Table.h",
"src/objc/table/WCTDatabase+Table.h",
"src/objc/table/WCTHandle+Table.h",
"src/objc/bridge/WCTBridgeProperty.h",
"src/objc/bridge/WCTBridgeProperty+Cpp.h",
"src/common/winq/*.{h,hpp}",
"src/common/winq/**/*.{h,hpp}",
"src/common/platform/SysTypes.h",
"src/common/utility/Shadow.hpp",
"src/common/utility/Macro.h",
"src/common/utility/CaseInsensitiveList.hpp",
"src/common/core/function/scalar/ScalarFunctionModule.hpp",
"src/common/core/function/scalar/ScalarFunctionTemplate.hpp",
"src/common/core/fts/FTSConst.h",
"src/common/core/fts/tokenizer/TokenizerModule.hpp",
"src/common/core/fts/tokenizer/TokenizerModuleTemplate.hpp",
"src/common/core/fts/tokenizer/BaseTokenizerUtil.hpp",
"src/common/core/fts/tokenizer/PinyinTokenizer.hpp",
"src/common/core/fts/tokenizer/OneOrBinaryTokenizer.hpp",
"src/common/core/fts/auxfunction/FTS5AuxiliaryFunctionTemplate.hpp",
"src/common/core/fts/auxfunction/AuxiliaryFunctionModule.hpp",
"src/common/core/fts/auxfunction/SubstringMatchInfo.hpp",
"src/common/core/fts/FTSError.hpp",
"src/common/core/RecyclableHandle.hpp",
"src/common/core/Tag.hpp",
"src/common/base/Recyclable.hpp",
"src/common/base/SharedThreadedErrorProne.hpp",
"src/common/base/StringView.hpp",
"src/common/base/WCDBOptional.hpp",
"src/common/base/WCDBError.hpp",
"src/common/base/Data.hpp",
"src/common/base/UnsafeData.hpp",
"src/common/base/MemberPointer.hpp",
"src/cpp/WCDBCpp.h",
"src/cpp/**/*.{h,hpp}",
"src/bridge/objcbridge/WCTBridgeMacro.h",
]
wcdb.private_header_files = [
"src/bridge/WCDBBridging.h",
"src/bridge/base/**/*.{h}",
"src/bridge/cppbridge/**/*.{h}",
"src/bridge/winqbridge/**/*.{h}",
"src/bridge/objcbridge/WCTAPIBridge.h"
]
wcdb.source_files = [
"src/WCDB.h",
"src/common/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/objc/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/cpp/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/swift/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/bridge/**/*.{swift,h,hpp,c,cpp,m,mm}"
]
wcdb.exclude_files = [
"src/common/platform/WCTFileManager.cpp",
"src/common/platform/WCTOperationQueue.cpp",
"src/cpp/tests/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/objc/tests/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/swift/tests/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/bridge/tests/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/bridge/include/**/*.{swift,h,hpp,c,cpp,m,mm}",
]
wcdb.preserve_path = "src/support/WCDB.modulemap"
wcdb.module_map = "src/support/WCDB.modulemap"
wcdb.frameworks = "CoreFoundation", "Security", "Foundation"
wcdb.ios.frameworks = "UIKit"
wcdb.libraries = "z", "c++"
wcdb.requires_arc = true
wcdb.pod_target_xcconfig = {
"GCC_PREPROCESSOR_DEFINITIONS" => "SQLITE_WCDB=1 " +
"SQLITE_WCDB_LOCK_HOOK=1 " +
"SQLITE_WCDB_CHECKPOINT_HANDLER=1 " +
"SQLITE_WCDB_SUSPEND=1 " +
"SQLITE_WCDB_IMPROVED_CHECKPOINT=1 " +
"SQLITE_HAS_CODEC " +
"SQLITE_DEFAULT_PAGE_SIZE=4096 " +
"SQLITE_DEFAULT_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_WAL_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_LOCKING_MODE=0 " +
"SQLITE_DEFAULT_WAL_AUTOCHECKPOINT=0 " +
"WCDB_SWIFT_BRIDGE_OBJC=1",
"HEADER_SEARCH_PATHS" => "${PODS_ROOT}/WCDB",
"LIBRARY_SEARCH_PATHS[sdk=macosx*]" => "$(SDKROOT)/usr/lib/system",
"CLANG_CXX_LANGUAGE_STANDARD" => "gnu++14",
"CLANG_CXX_LIBRARY" => "libc++",
"GCC_C_LANGUAGE_STANDARD" => "gnu11",
"VALID_ARCHS" => "arm64e arm64 x86_64",
"VALID_ARCHS[sdk=watchos*]" => "arm64_32 arm64 86_64",
"OTHER_CFLAGS" => "-fvisibility-inlines-hidden",
"OTHER_CPLUSPLUSFLAGS" => "-fvisibility-inlines-hidden",
"OTHER_SWIFT_FLAGS" => "-no-verify-emitted-module-interface",
"SWIFT_ACTIVE_COMPILATION_CONDITIONS" => "WCDB_SWIFT_BRIDGE_OBJC",
}
wcdb.header_dir = "WCDB"
wcdb.swift_versions = '5'
wcdb.dependency 'WCDBOptimizedSQLCipher', '1.4.8'
end
================================================
FILE: WCDB.swift.podspec
================================================
# pod repo update
# pod repo remove trunk
# pod lib lint --verbose --allow-warnings WCDB.swift.podspec --sources='https://github.com/CocoaPods/Specs.git'
# pod trunk push --verbose --allow-warnings WCDB.swift.podspec
Pod::Spec.new do |wcdb|
wcdb.name = "WCDB.swift"
wcdb.version = "2.1.15"
wcdb.summary = "WCDB is a cross-platform database framework developed by WeChat."
wcdb.description = <<-DESC
The WeChat Database, for Swift. (If you want to use WCDB for Objective-C or C++, see the "WCDB.objc" pod or "WCDB.cpp" pod. If you want to use WCDB for C++/Objc/Swift in one project, see the "WCDB" pod)
WCDB is an efficient, complete, easy-to-use mobile database framework used in the WeChat application.
It can be a replacement for Core Data, SQLite & FMDB.
DESC
wcdb.homepage = "https://github.com/Tencent/wcdb"
wcdb.module_name = "WCDBSwift"
wcdb.license = { :type => "BSD", :file => "LICENSE" }
wcdb.author = { "Qiuwen-Chen" => "qwchen2008@163.com" }
wcdb.ios.deployment_target = "11.0"
wcdb.osx.deployment_target = "10.13"
wcdb.watchos.deployment_target = "7.0"
wcdb.tvos.deployment_target = "12.4"
wcdb.source = { :git => "https://github.com/Tencent/wcdb.git", :tag => "v#{wcdb.version}" }
wcdb.private_header_files = "src/bridge/**/*.{h}"
wcdb.source_files = [
"src/swift/**/*.{swift}",
"src/bridge/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/common/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/objc/core/WCTFileManager.mm",
"src/objc/core/WCTOperationQueue.mm",
"src/objc/core/WCTFoundation.h",
"src/objc/core/WCTFoundation.mm",
"src/objc/core/WCTFTSTokenizerUtil.h",
"src/objc/core/WCTFTSTokenizerUtil.mm",
"src/objc/core/WCTDeclaration.h",
"src/objc/core/WCTValue.h",
"src/objc/orm/coding/WCTColumnCoding.h",
"src/objc/orm/macro/WCTPropertyMacro.h",
"src/objc/orm/coding/WCTTableCoding.h",
"src/objc/core/WCTConvertible.h",
"src/objc/core/WCTCommon.h",
"src/objc/core/WCTOptional.h",
"src/objc/core/WCTTag.h"
]
wcdb.exclude_files = [
"src/swift/tests/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/bridge/tests/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/bridge/include/**/*.{swift,h,hpp,c,cpp,m,mm}",
"src/common/platform/WCTFileManager.cpp",
"src/common/platform/WCTOperationQueue.cpp",
]
wcdb.requires_arc = true
wcdb.preserve_path = "src/support/WCDBSwift.modulemap"
wcdb.module_map = "src/support/WCDBSwift.modulemap"
wcdb.frameworks = "CoreFoundation", "Security", "Foundation"
wcdb.libraries = "z", "c++"
wcdb.pod_target_xcconfig = {
"GCC_PREPROCESSOR_DEFINITIONS" => "SQLITE_WCDB=1 " +
"SQLITE_WCDB_LOCK_HOOK=1 " +
"SQLITE_WCDB_CHECKPOINT_HANDLER=1 " +
"SQLITE_WCDB_SUSPEND=1 " +
"SQLITE_WCDB_IMPROVED_CHECKPOINT=1 " +
"SQLITE_HAS_CODEC " +
"SQLITE_DEFAULT_PAGE_SIZE=4096 " +
"SQLITE_DEFAULT_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_WAL_SYNCHRONOUS=1 " +
"SQLITE_DEFAULT_LOCKING_MODE=0 " +
"SQLITE_DEFAULT_WAL_AUTOCHECKPOINT=0",
'SWIFT_WHOLE_MODULE_OPTIMIZATION' => 'YES',
'APPLICATION_EXTENSION_API_ONLY' => 'YES',
"HEADER_SEARCH_PATHS" => "${PODS_ROOT}/WCDBSwift",
"LIBRARY_SEARCH_PATHS[sdk=macosx*]" => "$(SDKROOT)/usr/lib/system",
"CLANG_CXX_LANGUAGE_STANDARD" => "gnu++14",
"CLANG_CXX_LIBRARY" => "libc++",
"GCC_C_LANGUAGE_STANDARD" => "gnu11",
"VALID_ARCHS" => "arm64e arm64 x86_64",
"VALID_ARCHS[sdk=watchos*]" => "arm64_32 arm64 x86_64",
"OTHER_CFLAGS" => "-fvisibility-inlines-hidden",
"OTHER_CPLUSPLUSFLAGS" => "-fvisibility-inlines-hidden",
"OTHER_SWIFT_FLAGS" => "-no-verify-emitted-module-interface",
"SWIFT_ACTIVE_COMPILATION_CONDITIONS" => "WCDB_SWIFT_TARGET",
}
wcdb.swift_versions = '5'
wcdb.dependency 'WCDBOptimizedSQLCipher', '1.4.8'
end
================================================
FILE: deprecated/android/.gitignore
================================================
# Visual Studio
/vsproj/*
!/vsproj/*.sln
!/vsproj/*.vcxproj*
# Android Studio, Gradle
/local.properties
/build
/captures
**/local.gradle
================================================
FILE: deprecated/android/Android.mk
================================================
real_local_path := $(call my-dir)
root_path := $(call parent-dir, $(real_local_path))
prebuilt_path := $(root_path)/android/prebuilt/$(TARGET_ARCH)
build_info_path := $(NDK_OUT)
common_cflags := -Wall -Werror -Wno-unused-const-variable \
-ffunction-sections -fdata-sections \
-DSQLITE_HAS_CODEC -DSQLITE_CORE -DSQLITE_OS_UNIX
common_cppflags := -std=c++17 -fno-exceptions -fno-rtti
common_c_includes := \
$(prebuilt_path)/include \
$(root_path)/android/sqlcipher \
$(root_path)/icucompat
# Main library
LOCAL_PATH := $(root_path)/android/jni
include $(CLEAR_VARS)
LOCAL_MODULE := wcdb
LOCAL_CFLAGS := $(common_cflags)
LOCAL_CPPFLAGS := $(common_cppflags)
LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_SRC_FILES := \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.c)) \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))
LOCAL_LDLIBS := -llog -lz -ldl -latomic
LOCAL_LDFLAGS := -Wl,--gc-sections -Wl,--version-script=$(root_path)/android/wcdb.map
LOCAL_STATIC_LIBRARIES := \
wcdb-repair \
wcdb-backup \
wcdb-vfslog \
wcdb-fts \
wcdb-icucompat \
sqlcipher \
crypto-static
include $(BUILD_SHARED_LIBRARY)
# Repair
LOCAL_PATH := $(root_path)/repair
include $(CLEAR_VARS)
LOCAL_MODULE := wcdb-repair
LOCAL_CFLAGS := $(common_cflags)
LOCAL_CPPFLAGS := $(common_cppflags)
LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.c)) \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))
include $(BUILD_STATIC_LIBRARY)
# Backup
LOCAL_PATH := $(root_path)/backup
include $(CLEAR_VARS)
LOCAL_MODULE := wcdb-backup
LOCAL_CFLAGS := $(common_cflags)
LOCAL_CPPFLAGS := $(common_cppflags)
LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.c)) \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))
include $(BUILD_STATIC_LIBRARY)
# ICU compat
LOCAL_PATH := $(root_path)/icucompat
include $(CLEAR_VARS)
LOCAL_MODULE := wcdb-icucompat
LOCAL_CFLAGS := $(common_cflags)
LOCAL_CPPFLAGS := $(common_cppflags)
LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.c)) \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))
include $(BUILD_STATIC_LIBRARY)
# FTS
LOCAL_PATH := $(root_path)/fts
include $(CLEAR_VARS)
LOCAL_MODULE := wcdb-fts
LOCAL_CFLAGS := $(common_cflags)
LOCAL_CPPFLAGS := $(common_cppflags)
LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.c)) \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))
include $(BUILD_STATIC_LIBRARY)
# VFSLOG
LOCAL_PATH := $(root_path)/vfslog
include $(CLEAR_VARS)
LOCAL_MODULE := wcdb-vfslog
LOCAL_CFLAGS := $(common_cflags)
LOCAL_CPPFLAGS := $(common_cppflags)
LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.c)) \
$(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))
include $(BUILD_STATIC_LIBRARY)
# SQLCipher
LOCAL_PATH := $(root_path)/android/sqlcipher
include $(CLEAR_VARS)
LOCAL_MODULE := sqlcipher
LOCAL_CFLAGS := $(common_cflags) -Wno-unused -Wno-missing-braces \
-DSQLITE_UNTESTABLE \
-DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 \
-DHAVE_USLEEP=1 \
-DHAVE_FDATASYNC=1 \
-DSQLITE_HAVE_ISNAN \
-DSQLITE_DEFAULT_FILE_FORMAT=4 \
-DSQLITE_THREADSAFE=2 \
-DSQLITE_TEMP_STORE=2 \
-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS4 \
-DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 \
-DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \
-DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK \
-DSQLITE_DEFAULT_WORKER_THREADS=2 \
-DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576 \
-DUSE_PREAD64=1 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS \
-DSQLITE_ENABLE_FTS3_TOKENIZER \
-DSQLITE_ENABLE_STAT4 \
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
-DSQLITE_ENABLE_DBSTAT_VTAB \
-DOMIT_MEMLOCK \
-DOMIT_MEM_SECURITY \
-DSQLCIPHER_CRYPTO_OPENSSL \
-DSQLITE_MALLOC_SOFT_LIMIT=0 \
-DSQLITE_ENABLE_COLUMN_METADATA \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
-DSQLITE_MAX_ATTACHED=64 \
-DSQLITE_MAX_EXPR_DEPTH=0 \
-DSQLITE_OMIT_COMPILEOPTION_DIAGS \
-DSQLITE_OMIT_DEPRECATED \
-DSQLITE_PRINT_BUF_SIZE=256 \
-DSQLITE_WCDB=1 \
-DSQLITE_WCDB_CHECKPOINT_HANDLER=1 \
-DSQLITE_WCDB_IMPROVED_CHECKPOINT=1 \
-DSQLITE_WCDB_LOCK_HOOK=1 \
-DSQLITE_WCDB_SUSPEND=1
LOCAL_C_INCLUDES := $(common_c_includes)
LOCAL_SRC_FILES := sqlite3.c
include $(BUILD_STATIC_LIBRARY)
# Prebuilt libcrypto
LOCAL_PATH := $(prebuilt_path)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto-static
LOCAL_SRC_FILES := lib/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
================================================
FILE: deprecated/android/Application.mk
================================================
LOCAL_PATH:= $(call my-dir)
NDK_PROJECT_PATH := $(LOCAL_PATH)/build
APP_BUILD_SCRIPT := $(LOCAL_PATH)/Android.mk
APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64
APP_PLATFORM := android-14
APP_STL := c++_static
APP_PIE := true
APP_DEPRECATED_HEADERS := true
ifdef USE_GCC
NDK_TOOLCHAIN_VERSION := 4.9
endif
================================================
FILE: deprecated/android/addons/backup/mm_backup.c
================================================
/*
* 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.
*/
#define MM_BACKUP_INCLUDE_INTERNAL
#include "mm_backup.h"
#include <errno.h>
#include <pthread.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <openssl/rc4.h>
#include <zlib.h>
#define INPUT_BUFFER_SIZE 8192
#define OUTPUT_BUFFER_SIZE 8192
struct mm_backup_ctx {
sqlite3 *db; // database connection, not initialized until actual running.
z_stream zstrm; // output compression stream.
RC4_KEY rc4_key; // output file encryption key.
FILE *fp; // output file handle.
uint32_t flags; // configuration flags.
mm_logfunc log; // log function.
uint32_t stmt_count;
uint32_t sec_size;
uint32_t sec_pos;
mm_backup_tabdesc *tabdesc;
int num_tabdesc;
volatile char canceled; // task status.
char writable_schema; // whether PRAGMA writable_schema has been set.
char corrupted; // whether database is corrupted.
pthread_t write_thread;
pthread_mutex_t buf_lock;
pthread_cond_t buf_cond;
char in_finish;
char in_avail;
char in_full;
char write_error;
struct mm_backup_buffer {
uint_t avail;
uint8_t data[INPUT_BUFFER_SIZE];
} * p_buf, buffer[2];
char errmsg[2048];
};
static void *write_thread_entry(void *ud)
{
mm_backup_ctx *ctx = (mm_backup_ctx *) ud;
for (;;) {
int finish;
pthread_mutex_lock(&ctx->buf_lock);
{
while (!ctx->in_avail && !ctx->in_finish && !ctx->canceled)
pthread_cond_wait(&ctx->buf_cond, &ctx->buf_lock);
ctx->zstrm.next_in = ctx->p_buf->data;
ctx->zstrm.avail_in = ctx->p_buf->avail;
finish = ctx->in_finish;
ctx->p_buf = (ctx->p_buf == &ctx->buffer[0]) ? &ctx->buffer[1]
: &ctx->buffer[0];
ctx->p_buf->avail = 0;
ctx->in_avail = 0;
ctx->in_full = 0;
}
pthread_mutex_unlock(&ctx->buf_lock);
pthread_cond_signal(&ctx->buf_cond);
int ret;
uint8_t out_buf[OUTPUT_BUFFER_SIZE];
if (ctx->canceled)
return NULL;
do {
ctx->zstrm.next_out = out_buf;
ctx->zstrm.avail_out = sizeof(out_buf);
ret = deflate(&ctx->zstrm, finish ? Z_FINISH : Z_NO_FLUSH);
if (ret == Z_BUF_ERROR)
break;
if (ret != Z_OK && ret != Z_STREAM_END)
goto bail;
uint_t out_len = sizeof(out_buf) - ctx->zstrm.avail_out;
if ((ctx->flags & MMBAK_FLAG_NO_CIPHER) == 0)
RC4(&ctx->rc4_key, out_len, out_buf, out_buf);
const uint8_t *p = out_buf;
while (out_len > 0) {
size_t ret = fwrite(p, 1, out_len, ctx->fp);
if (ret == 0 && ferror(ctx->fp))
goto bail;
out_len -= ret;
p += ret;
ctx->sec_size += ret;
}
} while (ctx->zstrm.avail_out == 0 && ret != Z_STREAM_END);
if (ctx->zstrm.avail_in != 0)
goto bail;
if (ret == Z_STREAM_END)
break;
}
return NULL;
bail:
pthread_mutex_lock(&ctx->buf_lock);
ctx->write_error = 1;
pthread_cond_signal(&ctx->buf_cond);
pthread_mutex_unlock(&ctx->buf_lock);
return NULL;
}
static int dump_write_stream(mm_backup_ctx *ctx, const void *data, uint_t size)
{
struct mm_backup_buffer *p_buf;
const uint8_t *p_data = (const uint8_t *) data;
pthread_mutex_lock(&ctx->buf_lock);
while (size > 0) {
while (ctx->in_full && !ctx->canceled && !ctx->write_error)
pthread_cond_wait(&ctx->buf_cond, &ctx->buf_lock);
if (ctx->write_error) {
pthread_mutex_unlock(&ctx->buf_lock);
LOGE_("Writing thread reported error.");
return -1;
}
p_buf = ctx->p_buf;
uint_t size_to_write = (p_buf->avail + size > INPUT_BUFFER_SIZE)
? INPUT_BUFFER_SIZE - p_buf->avail
: size;
memcpy(p_buf->data + p_buf->avail, p_data, size_to_write);
size -= size_to_write;
p_buf->avail += size_to_write;
p_data += size_to_write;
ctx->in_avail = p_buf->avail > INPUT_BUFFER_SIZE / 4;
ctx->in_full = p_buf->avail == INPUT_BUFFER_SIZE;
if (ctx->in_avail || ctx->in_full)
pthread_cond_signal(&ctx->buf_cond);
}
pthread_mutex_unlock(&ctx->buf_lock);
return 0;
}
static int dump_write_end(mm_backup_ctx *ctx)
{
int ret;
// flush padding input.
pthread_mutex_lock(&ctx->buf_lock);
{
ctx->in_finish = 1;
if (ctx->write_error) {
LOGE_("Writing thread reported error.");
ret = -1;
} else
ret = 0;
}
pthread_mutex_unlock(&ctx->buf_lock);
pthread_cond_signal(&ctx->buf_cond);
return ret;
}
#define dump_write_byte(ctx, v) \
({ \
int _ret; \
uint8_t b1 = (uint8_t)(v); \
_ret = dump_write_stream((ctx), &b1, 1); \
_ret; \
})
// assume little-endian
#define dump_write_short(ctx, v) \
({ \
int _ret; \
uint16_t s1 = (uint16_t)(v); \
_ret = dump_write_stream((ctx), &s1, 2); \
_ret; \
})
#define dump_write_byte_byte(ctx, b1, b2) \
({ \
int _ret; \
uint8_t buf[2]; \
buf[0] = (uint8_t)(b1); \
buf[1] = (uint8_t)(b2); \
_ret = dump_write_stream((ctx), buf, 2); \
_ret; \
})
// assume little-endian
#define dump_write_byte_short(ctx, b, s) \
({ \
int _ret; \
uint8_t buf[3]; \
uint16_t s1 = (uint16_t)(s); \
buf[0] = (uint8_t)(b); \
buf[1] = (uint8_t)(s1 & 0xFF); \
buf[2] = (uint8_t)((s1 >> 8) & 0xFF); \
_ret = dump_write_stream((ctx), buf, 3); \
_ret; \
})
static int dump_write_varint(mm_backup_ctx *ctx, int64_t val)
{
uint8_t buf[12];
uint8_t *p = buf;
if (val < 0) {
*p++ = MMBAK_TAG_BIND_VARINT_MINUS;
val = ~val;
} else
*p++ = MMBAK_TAG_BIND_VARINT;
do {
uint8_t b = val & 0x7F;
val >>= 7;
if (val)
b |= 0x80;
*p++ = b;
} while (val);
return dump_write_stream(ctx, buf, p - buf);
}
#define string_literal(str) (str), (sizeof(str) - 1)
static int
dump_write_blob(mm_backup_ctx *ctx, uint8_t tag, const void *data, int size)
{
const char *p = (const char *) data;
int ret;
if (size < 0)
size = strlen(p);
if (size >= 65536) {
uint32_t ext_size = size & 0xFFFF0000;
uint16_t blocks = ext_size >> 16;
ret = dump_write_byte(ctx, MMBAK_TAG_LARGE_DATA);
ret |= dump_write_short(ctx, blocks);
ret |= dump_write_stream(ctx, p, ext_size);
if (ret != 0)
return -1;
size -= ext_size;
p += ext_size;
}
if (size < 256 &&
(tag == MMBAK_TAG_BIND_TEXT || tag == MMBAK_TAG_BIND_BLOB))
ret = dump_write_byte_byte(ctx, ++tag, (uint8_t) size);
else
ret = dump_write_byte_short(ctx, tag, (uint16_t) size);
ret |= dump_write_stream(ctx, p, size);
if (ret != 0)
return -1;
return 0;
}
static int dump_rows(mm_backup_ctx *ctx,
const char *table,
const char *condition,
int reverse)
{
// find out number of columns, which is used in INSERT statements.
int i, ret;
int num_columns = 0;
char sql_buf[8192];
sqlite3_stmt *stmt = NULL;
int row_count = 0;
sql_buf[0] = '\0';
int sql_len =
snprintf(sql_buf, sizeof(sql_buf), "PRAGMA table_info(\"%s\")", table);
ret = sqlite3_prepare_v2(ctx->db, sql_buf, sql_len, &stmt, NULL);
if (ret != SQLITE_OK)
goto bail_log_sql;
ret = sqlite3_step(stmt);
while (ret == SQLITE_ROW) {
num_columns++;
ret = sqlite3_step(stmt);
}
ret = sqlite3_finalize(stmt);
stmt = NULL;
if (ret != SQLITE_OK)
goto bail_log_sql;
if (num_columns == 0)
return SQLITE_OK;
// dump rows in table.
if (condition)
sql_len = snprintf(sql_buf, sizeof(sql_buf),
"SELECT * FROM \"%s\" WHERE %s;", table, condition);
else
sql_len = snprintf(sql_buf, sizeof(sql_buf), "SELECT * FROM \"%s\"%s;",
table, reverse ? " ORDER BY rowid DESC" : "");
ret = sqlite3_prepare_v2(ctx->db, sql_buf, sql_len, &stmt, NULL);
if (ret != SQLITE_OK)
goto bail_log_sql;
row_count = 0;
ret = sqlite3_step(stmt);
if (ret == SQLITE_ROW) {
// output INSERT statement with parameters.
sql_len = snprintf(sql_buf, sizeof(sql_buf),
"REPLACE INTO \"%s\" VALUES(", table);
for (i = 0; i < num_columns; i++)
sql_len +=
strlcpy(sql_buf + sql_len, "?,", sizeof(sql_buf) - sql_len);
sql_len--;
sql_len += strlcpy(sql_buf + sql_len, ");", sizeof(sql_buf) - sql_len);
if (dump_write_blob(ctx, MMBAK_TAG_SQL_REPEATED, sql_buf, sql_len)) {
ret = SQLITE_ERROR;
goto bail;
}
}
while (ret == SQLITE_ROW) {
// check cancel flag.
if (ctx->canceled) {
ret = SQLITE_ABORT;
goto bail;
}
for (i = 0; i < num_columns; i++) {
int type = sqlite3_column_type(stmt, i);
switch (type) {
case SQLITE_INTEGER: {
int64_t value = sqlite3_column_int64(stmt, i);
ret = dump_write_varint(ctx, value);
} break;
case SQLITE_FLOAT: {
double value = sqlite3_column_double(stmt, i);
ret = dump_write_byte(ctx, MMBAK_TAG_BIND_FLOAT);
ret |= dump_write_stream(ctx, &value, 8);
} break;
case SQLITE_TEXT: {
const char *value =
(const char *) sqlite3_column_text(stmt, i);
int len = sqlite3_column_bytes(stmt, i);
ret = dump_write_blob(ctx, MMBAK_TAG_BIND_TEXT, value, len);
} break;
case SQLITE_BLOB: {
const void *value = sqlite3_column_blob(stmt, i);
int len = sqlite3_column_bytes(stmt, i);
ret = dump_write_blob(ctx, MMBAK_TAG_BIND_BLOB, value, len);
} break;
case SQLITE_NULL:
ret = dump_write_byte(ctx, MMBAK_TAG_BIND_NULL);
break;
default:
LOGE("Unreconized SQLite type: %d", type);
ret = SQLITE_INTERNAL;
goto bail;
}
if (ret != 0) {
ret = SQLITE_ERROR;
goto bail;
}
row_count++;
}
if (dump_write_byte(ctx, MMBAK_TAG_END_ROW)) {
ret = SQLITE_ERROR;
goto bail;
}
ctx->stmt_count++;
ret = sqlite3_step(stmt);
}
if (row_count > 0)
if (dump_write_byte(ctx, MMBAK_TAG_END_SQL)) {
ret = SQLITE_ERROR;
goto bail;
}
ret = sqlite3_finalize(stmt);
stmt = NULL;
if (ret != SQLITE_OK) {
if (ret == SQLITE_CORRUPT)
goto bail_log_corrupt;
goto bail_log_sql;
}
return ret;
bail_log_corrupt:
LOGE("Database corruption detected. [table: %s, condition: %s, row: %d, "
"reverse: %s]",
table, condition ? condition : "null", row_count,
reverse ? "yes" : "no");
goto bail;
bail_log_sql:
LOGE("SQL execution failed: %s, [SQL: %s]", sqlite3_errmsg(ctx->db),
stmt ? sqlite3_sql(stmt) : sql_buf);
bail:
if (stmt)
sqlite3_finalize(stmt);
return ret;
}
static int compar_table_tabdesc(const void *key, const void *value)
{
return strcmp((const char *) key,
((const mm_backup_tabdesc *) value)->table);
}
static int
dump_callback(void *ud, int num_columns, char **values, char **columns)
{
mm_backup_ctx *ctx = (mm_backup_ctx *) ud;
const char *table = values[0];
const char *type = values[1];
const char *sql = values[2];
int ret;
// check exit status.
if (ctx->canceled)
return -1;
// deal with system tables.
if (!strcmp(table, "sqlite_sequence")) {
if (dump_write_blob(ctx, MMBAK_TAG_SQL_ONESHOT,
string_literal("DELETE FROM sqlite_sequence;")) !=
0)
return -1;
} else if (!sqlite3_strglob("sqlite_stat?", table)) {
if (dump_write_blob(ctx, MMBAK_TAG_SQL_ONESHOT,
string_literal("ANALYZE sqlite_master;")))
return -1;
} else if (!strncmp(table, "sqlite_", 7)) {
return 0;
}
// find whether in dump list.
const char *table_condition = NULL;
if (ctx->tabdesc) {
const mm_backup_tabdesc *desc = (const mm_backup_tabdesc *) bsearch(
table, ctx->tabdesc, ctx->num_tabdesc, sizeof(mm_backup_tabdesc),
compar_table_tabdesc);
if (!desc)
return 0;
table_condition = desc->condition;
}
if (!strncmp(sql, "CREATE VIRTUAL TABLE", 20)) {
if (!(ctx->flags & MMBAK_FLAG_NO_CREATE_TABLE)) {
if (!ctx->writable_schema) {
if (dump_write_blob(
ctx, MMBAK_TAG_SQL_ONESHOT,
string_literal("PRAGMA writable_schema=ON;")))
return -1;
ctx->writable_schema = 1;
}
char *vt_sql = sqlite3_mprintf(
"INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
"VALUES('table','%q','%q',0,'%q');",
table, table, sql);
if (dump_write_blob(ctx, MMBAK_TAG_SQL_ONESHOT, vt_sql, -1))
return -1;
sqlite3_free(vt_sql);
}
return 0;
} else if (!(ctx->flags & MMBAK_FLAG_NO_CREATE_TABLE)) {
if (dump_write_blob(ctx, MMBAK_TAG_SQL_ONESHOT, sql, -1))
return -1;
}
// for tables, dump all rows.
if (!strcmp(type, "table")) {
ret = dump_rows(ctx, table, table_condition, 0);
if (ret == SQLITE_CORRUPT && !table_condition &&
(ctx->flags & MMBAK_FLAG_FIX_CORRUPTION)) {
ret = dump_rows(ctx, table, table_condition, 1);
if (ret == SQLITE_CORRUPT)
ret = SQLITE_OK;
}
if (ret != SQLITE_OK)
return -1;
}
return 0;
}
static int run_schema_dump_query(mm_backup_ctx *ctx, const char *query_sql)
{
// check cancel status.
if (ctx->canceled)
return MMBAK_RET_CANCELED;
// dump all tables.
char *errmsg = NULL;
int ret = sqlite3_exec(ctx->db, query_sql, dump_callback, ctx, &errmsg);
if (ret == SQLITE_ABORT) {
// abort due to user cancellation or error.
if (errmsg)
sqlite3_free(errmsg);
return (ctx->canceled) ? MMBAK_RET_CANCELED : MMBAK_RET_FAILED;
}
if (ret == SQLITE_CORRUPT && (ctx->flags & MMBAK_FLAG_FIX_CORRUPTION)) {
// in case of database corruption, dump tables in reverse order.
if (errmsg) {
LOGE("SQL execution failed: %s [SQL: %s]", errmsg, query_sql);
sqlite3_free(errmsg);
errmsg = NULL;
}
size_t len = strlen(query_sql);
char *query_sql_reverse = (char *) malloc(len + 32);
if (!query_sql_reverse)
return ret;
sqlite3_snprintf(len + 32, query_sql_reverse, "%s ORDER BY rowid DESC",
query_sql);
ret = sqlite3_exec(ctx->db, query_sql_reverse, dump_callback, ctx,
&errmsg);
free(query_sql_reverse);
}
if (errmsg) {
LOGE("SQL execution failed: %s [SQL: %s]", errmsg, query_sql);
sqlite3_free(errmsg);
}
return (ret == SQLITE_OK) ? MMBAK_RET_OK : MMBAK_RET_FAILED;
}
mm_backup_ctx *mm_backup_init(const unsigned char *key,
int key_len,
const char *out_path,
unsigned int flags,
mm_logfunc logfunc)
{
if (!logfunc)
logfunc = dummy_log;
mm_backup_ctx *ctx = (mm_backup_ctx *) malloc(sizeof(mm_backup_ctx));
if (!ctx) {
logfunc(MMBAK_LOG_ERROR, "Memory allocation failed.");
return NULL;
}
memset(ctx, 0, sizeof(mm_backup_ctx));
ctx->log = logfunc;
int compress_level =
(flags & MMBAK_FLAG_NO_COMPRESS) ? 0 : Z_DEFAULT_COMPRESSION;
if (Z_OK != deflateInit(&ctx->zstrm, compress_level))
LOG_AND_FAIL("Failed to initialize deflate: %s",
ctx->zstrm.msg ? ctx->zstrm.msg : "Unknown");
if (key && key_len > 0)
RC4_set_key(&ctx->rc4_key, key_len, key);
else
flags |= MMBAK_FLAG_NO_CIPHER;
if (flags & MMBAK_FLAG_INCREMENTAL) {
ctx->fp = fopen(out_path, "rb+");
if (!ctx->fp)
LOG_AND_FAIL("Cannot open file '%s' for appending: %s", out_path,
strerror(errno));
// check header and version.
mm_backup_header header;
int ret = fread(&header, sizeof(mm_backup_header), 1, ctx->fp);
if (ret < 1)
LOG_AND_FAIL("Invalid header in base file '%s'.", out_path);
if (memcmp(header.magic, MMBAK_MAGIC, sizeof(MMBAK_MAGIC) - 1) != 0 ||
header.version != MMBAK_VERSION)
LOG_AND_FAIL("Invalid header in base file '%s'.", out_path);
// seek to end.
ret = fseek(ctx->fp, 0, SEEK_END);
if (ret != 0)
LOG_AND_FAIL("Cannot seek in file '%s': %s", out_path,
strerror(errno));
} else {
ctx->fp = fopen(out_path, "wb");
if (!ctx->fp)
LOG_AND_FAIL("Cannot open file '%s' for writing: %s", out_path,
strerror(errno));
// write file header.
mm_backup_header header;
memcpy(header.magic, MMBAK_MAGIC, sizeof(MMBAK_MAGIC) - 1);
header.version = MMBAK_VERSION;
int ret = fwrite(&header, sizeof(header), 1, ctx->fp);
if (ret < 1)
LOG_AND_FAIL("Cannot write to file '%s': %s", out_path,
strerror(errno));
}
ctx->sec_pos = (uint32_t) ftell(ctx->fp);
pthread_mutex_init(&ctx->buf_lock, NULL);
pthread_cond_init(&ctx->buf_cond, NULL);
ctx->flags = flags;
ctx->canceled = 1;
ctx->in_finish = 0;
ctx->in_avail = 0;
ctx->in_full = 0;
ctx->write_error = 0;
ctx->buffer[0].avail = 0;
ctx->buffer[1].avail = 0;
ctx->p_buf = &ctx->buffer[0];
LOGI("Database backup context initialized. [output: %s, flags: 0x%04x]",
out_path, flags);
return ctx;
bail:
if (ctx) {
deflateEnd(&ctx->zstrm);
if (ctx->fp)
fclose(ctx->fp);
free(ctx);
}
return NULL;
}
static int compar_tabdesc(const void *a, const void *b)
{
return strcmp(((const mm_backup_tabdesc *) a)->table,
((const mm_backup_tabdesc *) b)->table);
}
int mm_backup_run(mm_backup_ctx *ctx,
sqlite3 *db,
const mm_backup_tabdesc *desc,
int num_desc)
{
char *errmsg = NULL;
int ret = MMBAK_RET_FAILED;
const char *dbfile = sqlite3_db_filename(db, "main");
LOGI("Database backup started. [db: %s]",
dbfile ? dbfile : "(temp or memory)");
// Make a sorted copy of tabdesc.
if (desc && num_desc > 0) {
ctx->tabdesc =
(mm_backup_tabdesc *) malloc(sizeof(mm_backup_tabdesc) * num_desc);
if (!ctx->tabdesc)
LOG_AND_FAIL("Not enough memory.");
memcpy(ctx->tabdesc, desc, sizeof(mm_backup_tabdesc) * num_desc);
qsort(ctx->tabdesc, num_desc, sizeof(mm_backup_tabdesc),
compar_tabdesc);
ctx->num_tabdesc = num_desc;
// adjust/print tabdesc.
LOGI("Backup with table descriptors. [count: %d]", ctx->num_tabdesc);
int i;
for (i = 0; i < num_desc; i++) {
if (ctx->tabdesc[i].condition && ctx->tabdesc[i].condition[0] == 0)
ctx->tabdesc[i].condition = NULL;
LOGI(" > table: %s, condition: %s", ctx->tabdesc[i].table,
ctx->tabdesc[i].condition ? ctx->tabdesc[i].condition
: "null");
}
} else {
ctx->tabdesc = NULL;
ctx->num_tabdesc = 0;
}
ctx->db = db;
ctx->canceled = 0;
ctx->stmt_count = 0;
ctx->sec_size = 0;
// initialize write thread.
if (pthread_create(&ctx->write_thread, NULL, write_thread_entry, ctx) != 0)
LOG_AND_FAIL("Cannot initialize writer thread.");
if (sqlite3_exec(db, "SAVEPOINT dump; PRAGMA writable_schema=ON;", 0, 0,
&errmsg) != SQLITE_OK)
LOG_AND_FAIL("Cannot execute startup SQL: %s",
errmsg ? errmsg : "Unknown");
// write section placeholder.
mm_backup_section section = {.flags = ctx->flags, .sec_size = 0};
if (fwrite(§ion, sizeof(mm_backup_section), 1, ctx->fp) < 1)
LOG_AND_FAIL("Cannot write to file: %s", strerror(errno));
// dump tables.
if ((ret = run_schema_dump_query(
ctx, "SELECT name, type, sql FROM sqlite_master WHERE sql NOT NULL"
" AND type=='table' AND name!='sqlite_sequence'")) !=
MMBAK_RET_OK)
goto bail;
if ((ret = run_schema_dump_query(
ctx, "SELECT name, type, sql FROM sqlite_master WHERE "
"name=='sqlite_sequence'")) != MMBAK_RET_OK)
goto bail;
if ((ret = run_schema_dump_query(
ctx, "SELECT name, type, sql FROM sqlite_master WHERE sql NOT NULL"
" AND type IN ('index','trigger','view')")) != MMBAK_RET_OK)
goto bail;
// recover writable_schema.
if (ctx->writable_schema)
if (dump_write_blob(ctx, MMBAK_TAG_SQL_ONESHOT,
string_literal("PRAGMA writable_schema=OFF;")) != 0)
goto bail;
if (dump_write_end(ctx) != 0)
goto bail;
sqlite3_exec(db, "PRAGMA writable_schema=OFF; RELEASE dump;", 0, 0, 0);
pthread_join(ctx->write_thread, NULL);
// write section header.
section.sec_size = ctx->sec_size;
ret = fseek(ctx->fp, ctx->sec_pos, SEEK_SET);
if (ret != 0)
LOG_AND_FAIL("Cannot seek in file: %s", strerror(errno));
ret = fwrite(§ion, sizeof(mm_backup_section), 1, ctx->fp);
if (ret < 1)
LOG_AND_FAIL("Cannot write to file: %s", strerror(errno));
fflush(ctx->fp);
ctx->canceled = 1;
LOGI("Database backup finished. [items: %u, section size: %u]",
ctx->stmt_count, ctx->sec_size);
return 0;
bail:
if (!ctx->canceled) {
ctx->canceled = 1;
pthread_cond_broadcast(&ctx->buf_cond);
}
pthread_detach(ctx->write_thread);
sqlite3_exec(db, "PRAGMA writable_schema=OFF; RELEASE dump;", 0, 0, 0);
if (errmsg)
sqlite3_free(errmsg);
return ret;
}
void mm_backup_cancel(mm_backup_ctx *ctx)
{
ctx->canceled = 1;
pthread_cond_broadcast(&ctx->buf_cond);
LOGI_("Backup operation canceled.");
}
void mm_backup_finish(mm_backup_ctx *ctx)
{
if (!ctx->canceled) {
ctx->canceled = 1;
pthread_cond_broadcast(&ctx->buf_cond);
pthread_detach(ctx->write_thread);
}
free(ctx->tabdesc);
pthread_mutex_destroy(&ctx->buf_lock);
pthread_cond_destroy(&ctx->buf_cond);
if (ctx->fp)
fclose(ctx->fp);
deflateEnd(&ctx->zstrm);
free(ctx);
}
void mm_backup_statistics(mm_backup_ctx *ctx, unsigned int *stmt_count)
{
if (stmt_count)
*stmt_count = ctx->stmt_count;
}
const char *mm_backup_last_error(mm_backup_ctx *ctx)
{
return ctx->errmsg;
}
================================================
FILE: deprecated/android/addons/backup/mm_backup.h
================================================
/*
* 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 __MM_BACKUP_H__
#define __MM_BACKUP_H__
#include <sqlite3.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define MMBAK_RET_FAILED (-1)
#define MMBAK_RET_OK 0
#define MMBAK_RET_CANCELED 1
#define MMBAK_FLAG_NO_CIPHER 0x0001
#define MMBAK_FLAG_NO_COMPRESS 0x0002
#define MMBAK_FLAG_FIX_CORRUPTION 0x0004
#define MMBAK_FLAG_NO_CREATE_TABLE 0x0008
#define MMBAK_FLAG_INCREMENTAL 0x0010
#define MMBAK_LOG_DEBUG 0
#define MMBAK_LOG_INFO 1
#define MMBAK_LOG_ERROR 2
typedef struct mm_backup_ctx mm_backup_ctx;
typedef struct mm_recover_ctx mm_recover_ctx;
typedef void (*mm_logfunc)(int prio, const char *msg);
typedef struct mm_backup_tabdesc {
const char *table;
const char *condition;
} mm_backup_tabdesc;
mm_backup_ctx *mm_backup_init(const unsigned char *key,
int key_len,
const char *out_path,
unsigned int flags,
mm_logfunc logfunc);
int mm_backup_run(mm_backup_ctx *ctx,
sqlite3 *db,
const mm_backup_tabdesc *desc,
int num_desc);
void mm_backup_statistics(mm_backup_ctx *ctx, unsigned int *stmt_count);
void mm_backup_cancel(mm_backup_ctx *ctx);
void mm_backup_finish(mm_backup_ctx *ctx);
const char *mm_backup_last_error(mm_backup_ctx *ctx);
mm_recover_ctx *mm_recover_init(const char *in_path,
const unsigned char *key,
int key_len,
mm_logfunc logfunc);
int mm_recover_run(mm_recover_ctx *ctx, sqlite3 *db, int fatal);
void mm_recover_statistics(mm_recover_ctx *ctx,
unsigned int *succeeded,
unsigned int *failed);
void mm_recover_cancel(mm_recover_ctx *ctx);
void mm_recover_finish(mm_recover_ctx *ctx);
const char *mm_recover_last_error(mm_recover_ctx *ctx);
#if defined(MM_BACKUP_INCLUDE_INTERNAL)
#define MMBAK_TAG_LARGE_DATA 0x80
#define MMBAK_TAG_SQL_ONESHOT 0x81
#define MMBAK_TAG_SQL_REPEATED 0x82
#define MMBAK_TAG_END_ROW 0x83
#define MMBAK_TAG_END_SQL 0x84
#define MMBAK_TAG_BIND_NULL 0x00
#define MMBAK_TAG_BIND_VARINT 0x01
#define MMBAK_TAG_BIND_VARINT_MINUS 0x02
#define MMBAK_TAG_BIND_FLOAT 0x03
#define MMBAK_TAG_BIND_TEXT 0x04
#define MMBAK_TAG_BIND_TEXT_SHORT 0x05
#define MMBAK_TAG_BIND_BLOB 0x06
#define MMBAK_TAG_BIND_BLOB_SHORT 0x07
#define MMBAK_MAGIC "\0dBbAk"
#define MMBAK_VERSION 0x0002
typedef struct mm_backup_header {
char magic[6]; // file format magic, always MMBAK_MAGIC
uint16_t version; // file format version, current version is MMBAK_VERSION
} mm_backup_header;
typedef struct mm_backup_section {
uint32_t flags; // flags used in mm_backup_init, see MMBAK_FLAG_*
uint32_t sec_size; // section sizes
} mm_backup_section;
void mm_print_log(mm_logfunc logfunc, int prio, const char *fmt, ...)
#if defined(__GNUC__)
__attribute__((format(printf, 3, 4)))
#endif
;
void mm_print_err(mm_logfunc logfunc, char *errmsg, const char *fmt, ...)
#if defined(__GNUC__)
__attribute__((format(printf, 3, 4)))
#endif
;
void dummy_log(int prio, const char *msg);
#define LOGD(fmt, ...) \
mm_print_log(ctx->log, MMBAK_LOG_DEBUG, (fmt), __VA_ARGS__)
#define LOGI(fmt, ...) \
mm_print_log(ctx->log, MMBAK_LOG_INFO, (fmt), __VA_ARGS__)
#define LOGE(fmt, ...) \
mm_print_log(ctx->log, MMBAK_LOG_ERROR, (fmt), __VA_ARGS__)
#define LOGD_(msg) ctx->log(MMBAK_LOG_DEBUG, (msg));
#define LOGI_(msg) ctx->log(MMBAK_LOG_INFO, (msg));
#define LOGE_(msg) ctx->log(MMBAK_LOG_ERROR, (msg));
#define LOG_AND_FAIL(fmt, args...) \
do { \
mm_print_err(ctx->log, ctx->errmsg, (fmt), ##args); \
goto bail; \
} while (0)
#endif
#ifdef __cplusplus
}
#endif
#endif
================================================
FILE: deprecated/android/addons/backup/mm_recover.c
================================================
/*
* 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.
*/
#define MM_BACKUP_INCLUDE_INTERNAL
#include "mm_backup.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/rc4.h>
#include <zlib.h>
struct mm_recover_ctx {
sqlite3 *db; // database connection, not initialized until actual running.
uint32_t flags; // section flags.
z_stream zstrm; // input compression stream.
RC4_KEY rc4_template; // key template.
RC4_KEY rc4_key; // input file decryption key.
FILE *fp; // input file handle.
mm_logfunc log; // log function.
uint32_t sec_size; // section size.
uint32_t succ_count; // count of successfully executed statments.
uint32_t fail_count; // count of failed statments.
uint32_t section_count; // count of processed sections.
uint16_t version; // dump file version.
volatile char canceled; // task status.
uint8_t in_buf[4096]; // gzip input buffer.
char errmsg[2048];
};
static const char *const BIND_TAG_TEXT[] = {
"BIND_NULL", // 0x00
"BIND_VARINT", // 0x01
"BIND_VARINT_MINUS", // 0x02
"BIND_FLOAT", // 0x03
"BIND_TEXT", // 0x04
"BIND_TEXT_SHORT", // 0x05
"BIND_BLOB", // 0x06
"BIND_BLOB_SHORT", // 0x07
};
static const char *const FUNC_TAG_TEXT[] = {
"LARGE_DATA", // 0x80
"SQL_ONESHOT", // 0x81
"SQL_REPEATED", // 0x82
"END_ROW", // 0x83
"END_SQL", // 0x84
};
static const char *tag2text(uint8_t tag)
{
return (tag & 0x80) ? FUNC_TAG_TEXT[tag & 0x7F] : BIND_TAG_TEXT[tag];
}
static int read_header(mm_recover_ctx *ctx)
{
mm_backup_header header;
int ret = fread(&header, sizeof(header), 1, ctx->fp);
if (ret != 1)
LOG_AND_FAIL("Cannot read backup header.");
if (memcmp(header.magic, MMBAK_MAGIC, sizeof(MMBAK_MAGIC) - 1) != 0)
LOG_AND_FAIL("Invalid backup file format.");
if (header.version != 1 && header.version != 2)
LOG_AND_FAIL("Invalid backup file version: %d", header.version);
ctx->version = header.version;
return 0;
bail:
return MMBAK_RET_FAILED;
}
static int dump_read_stream(mm_recover_ctx *ctx, void *buf, uint_t size)
{
int ret;
if (size == 0)
return 0;
ctx->zstrm.next_out = (uint8_t *) buf;
ctx->zstrm.avail_out = size;
do {
if (ctx->zstrm.avail_in == 0 && ctx->sec_size > 0) {
ret = (ctx->sec_size > sizeof(ctx->in_buf)) ? sizeof(ctx->in_buf)
: ctx->sec_size;
ret = fread(ctx->in_buf, 1, ret, ctx->fp);
if (ret == 0 && ferror(ctx->fp))
LOG_AND_FAIL("Failed reading stream: %s", strerror(errno));
if (ret > 0) {
if ((ctx->flags & MMBAK_FLAG_NO_CIPHER) == 0)
RC4(&ctx->rc4_key, ret, ctx->in_buf, ctx->in_buf);
ctx->zstrm.next_in = ctx->in_buf;
ctx->zstrm.avail_in = ret;
ctx->sec_size -= ret;
}
}
ret = inflate(&ctx->zstrm, Z_NO_FLUSH);
if (ret != Z_OK && ret != Z_STREAM_END)
LOG_AND_FAIL("Inflate error: %s",
ctx->zstrm.msg ? ctx->zstrm.msg : "Unknown");
} while (ctx->zstrm.avail_out > 0 && ret != Z_STREAM_END);
return size - ctx->zstrm.avail_out;
bail:
return MMBAK_RET_FAILED;
}
static int dump_read_varint(mm_recover_ctx *ctx, int64_t *val, int minus)
{
uint8_t b;
int ret;
int64_t v = 0;
int shift = 0;
do {
ret = dump_read_stream(ctx, &b, 1);
if (ret != 1)
return MMBAK_RET_FAILED;
v |= (int64_t)(b & 0x7F) << shift;
shift += 7;
} while (b & 0x80);
if (minus)
v = ~v;
*val = v;
return 0;
}
#define READ_STREAM_FAIL(tag, len, ret) \
LOG_AND_FAIL("Read stream failed. [tag: %s, length: %d, ret: %d]", \
tag2text((tag)), (len), (ret))
#define MEMORY_ALLOC_FAIL(tag, len) \
LOG_AND_FAIL("Memory allocation failed. [tag: %s, length: %d]", \
tag2text((tag)), (len))
#define SQLITE_FAIL_ERRMSG(tag, sql, errmsg) \
LOG_AND_FAIL("SQL execution failed. [tag: %s, err: %s, sql: %s]", \
tag2text((tag)), (errmsg), (sql))
#define SQLITE_FAIL_GETMSG(tag, sql, db) \
LOG_AND_FAIL("SQL execution failed. [tag: %s, err: %s, sql: %s]", \
tag2text((tag)), sqlite3_errmsg((db)), (sql))
#define CUSTOM_FAIL(tag, msg) \
LOG_AND_FAIL("%s [tag: %s]", (msg), tag2text((tag)))
#define SQLITE_FAIL_ERRMSG_WARN(tag, sql, errmsg) \
LOGE("SQL execution failed. [tag: %s, err: %s, sql: %s]", tag2text((tag)), \
(errmsg), (sql))
#define SQLITE_FAIL_GETMSG_WARN(tag, sql, db) \
LOGE("SQL execution failed. [tag: %s, err: %s, sql: %s]", tag2text((tag)), \
sqlite3_errmsg((db)), (sql))
static int dump_read_and_run_tag(mm_recover_ctx *ctx, int fatal)
{
int ret;
uint8_t tag;
uint8_t length_short;
uint16_t length;
char *data = NULL;
char *p_data = NULL;
sqlite3_stmt *stmt = NULL;
int bind_idx;
char *errmsg = NULL;
char databuf[8192];
while (!ctx->canceled) {
ret = dump_read_stream(ctx, &tag, 1);
if (ret == 0)
return MMBAK_RET_OK;
else if (ret != 1)
return MMBAK_RET_FAILED;
switch (tag) {
case MMBAK_TAG_LARGE_DATA:
if (data != NULL)
CUSTOM_FAIL(tag, "Internal error.");
if ((ret = dump_read_stream(ctx, &length, 2)) != 2)
READ_STREAM_FAIL(tag, 2, ret);
data = (char *) malloc((length + 1) * 65536);
if (!data)
MEMORY_ALLOC_FAIL(tag, (length + 1) * 65536);
if ((ret = dump_read_stream(ctx, data, length * 65536)) !=
length * 65536)
READ_STREAM_FAIL(tag, length * 65536, ret);
p_data = data;
//LOGD("[%s] len=%u * 65536", "LARGE_DATA", length);
break;
case MMBAK_TAG_SQL_ONESHOT:
if ((ret = dump_read_stream(ctx, &length, 2)) != 2)
READ_STREAM_FAIL(tag, 2, ret);
if (!p_data) {
if (length < sizeof(databuf))
data = databuf;
else {
data = (char *) malloc(length + 1);
if (!data)
MEMORY_ALLOC_FAIL(tag, length + 1);
}
p_data = data;
}
if ((ret = dump_read_stream(ctx, p_data, length)) != length)
READ_STREAM_FAIL(tag, length, ret);
p_data[length] = '\0';
ret = sqlite3_exec(ctx->db, data, 0, 0, &errmsg);
if (ret != SQLITE_OK) {
SQLITE_FAIL_ERRMSG_WARN(tag, data, errmsg);
if (fatal)
goto bail;
sqlite3_free(errmsg);
ctx->fail_count++;
} else
ctx->succ_count++;
//LOGD("[%s] sql=%s", "SQL_ONESHOT", data);
if (data != databuf)
free(data);
p_data = data = NULL;
break;
case MMBAK_TAG_SQL_REPEATED:
if ((ret = dump_read_stream(ctx, &length, 2)) != 2)
READ_STREAM_FAIL(tag, 2, ret);
if (!p_data) {
if (length < sizeof(databuf))
data = databuf;
else {
data = (char *) malloc(length + 1);
if (!data)
MEMORY_ALLOC_FAIL(tag, length + 1);
}
p_data = data;
}
if ((ret = dump_read_stream(ctx, p_data, length)) != length)
READ_STREAM_FAIL(tag, length, ret);
p_data[length] = '\0';
ret = sqlite3_prepare_v2(ctx->db, data,
(p_data - data) + length, &stmt, NULL);
if (ret != SQLITE_OK) {
SQLITE_FAIL_GETMSG_WARN(tag, data, ctx->db);
if (fatal)
goto bail;
stmt = NULL;
}
//LOGD("[%s] sql=%s", "SQL_REPEATED", data);
if (data != databuf)
free(data);
p_data = data = NULL;
bind_idx = 0;
do {
// check exit status.
if (ctx->canceled) {
if (data && data != databuf)
free(data);
if (stmt)
sqlite3_finalize(stmt);
return MMBAK_RET_CANCELED;
}
if ((ret = dump_read_stream(ctx, &tag, 1)) != 1)
READ_STREAM_FAIL(tag, 1, ret);
switch (tag) {
union {
int64_t i;
double f;
} value;
case MMBAK_TAG_LARGE_DATA:
if (data != NULL)
CUSTOM_FAIL(tag, "Internal error.");
if ((ret = dump_read_stream(ctx, &length, 2)) != 2)
READ_STREAM_FAIL(tag, 2, ret);
data = (char *) malloc((length + 1) * 65536);
if (!data)
MEMORY_ALLOC_FAIL(tag, (length + 1) * 65536);
if ((ret = dump_read_stream(ctx, data,
length * 65536)) !=
length * 65536)
READ_STREAM_FAIL(tag, length * 65536, ret);
p_data = data;
//LOGD(" > [%s] len=%u * 65536", "LARGE_DATA", length);
break;
case MMBAK_TAG_END_ROW:
if (!stmt)
ctx->fail_count++;
else {
while (sqlite3_step(stmt) == SQLITE_ROW) {
}
ret = sqlite3_reset(stmt);
if (ret != SQLITE_OK) {
SQLITE_FAIL_GETMSG_WARN(
tag, sqlite3_sql(stmt), ctx->db);
if (fatal)
goto bail;
ctx->fail_count++;
} else {
ctx->succ_count++;
if (ctx->succ_count % 256 == 0) {
// We have run 256 insertions, do a transaction commit.
ret = sqlite3_exec(ctx->db,
"COMMIT; BEGIN;", 0,
0, &errmsg);
if (ret != SQLITE_OK) {
SQLITE_FAIL_ERRMSG_WARN(tag, data,
errmsg);
if (fatal)
goto bail;
sqlite3_free(errmsg);
ctx->fail_count++;
}
}
}
}
bind_idx = 0;
//LOGD(" > [%s]", "END_ROW");
break;
case MMBAK_TAG_END_SQL:
//LOGD(" > [%s]", "END_SQL");
break; // end of loop
case MMBAK_TAG_BIND_NULL:
if (stmt)
sqlite3_bind_null(stmt, ++bind_idx);
//LOGD(" > [%s]", "BIND_NULL");
break;
case MMBAK_TAG_BIND_VARINT:
case MMBAK_TAG_BIND_VARINT_MINUS:
if (dump_read_varint(
ctx, &value.i,
tag == MMBAK_TAG_BIND_VARINT_MINUS) != 0)
CUSTOM_FAIL(tag, "Read varint failed.");
if (stmt)
sqlite3_bind_int64(stmt, ++bind_idx, value.i);
//LOGD(" > [%s] value=%lld", tag2text(tag), value.i);
break;
case MMBAK_TAG_BIND_FLOAT:
if ((ret = dump_read_stream(ctx, &value, 8)) != 8)
READ_STREAM_FAIL(tag, 8, ret);
if (stmt)
sqlite3_bind_double(stmt, ++bind_idx, value.f);
//LOGD(" > [%s] value=%f", "BIND_FLOAT", value.f);
break;
case MMBAK_TAG_BIND_TEXT:
case MMBAK_TAG_BIND_BLOB:
if ((ret = dump_read_stream(ctx, &length, 2)) != 2)
READ_STREAM_FAIL(tag, 2, ret);
if (!p_data) {
data = (char *) malloc(length);
if (!data)
MEMORY_ALLOC_FAIL(tag, length);
p_data = data;
}
if ((ret = dump_read_stream(ctx, p_data, length)) !=
length)
READ_STREAM_FAIL(tag, length, ret);
//LOGD(" > [%s] value=%s", tag2text(tag), tag == MMBAK_TAG_BIND_TEXT ? data : "(BLOB)");
if (stmt) {
if (tag == MMBAK_TAG_BIND_TEXT)
sqlite3_bind_text(stmt, ++bind_idx, data,
(p_data - data) + length,
free);
else
sqlite3_bind_blob(stmt, ++bind_idx, data,
(p_data - data) + length,
free);
} else
free(data);
p_data = data = NULL;
break;
case MMBAK_TAG_BIND_TEXT_SHORT:
case MMBAK_TAG_BIND_BLOB_SHORT:
if ((ret = dump_read_stream(ctx, &length_short,
1)) != 1)
READ_STREAM_FAIL(tag, 1, ret);
length = length_short;
if (!p_data) {
data = (char *) malloc(length);
if (!data)
MEMORY_ALLOC_FAIL(tag, length);
p_data = data;
}
if ((ret = dump_read_stream(ctx, p_data, length)) !=
length)
READ_STREAM_FAIL(tag, length, ret);
//LOGD(" > [%s] value=%s", tag2text(tag), tag == MMBAK_TAG_BIND_TEXT_SHORT ? data : "(BLOB)");
if (stmt) {
if (tag == MMBAK_TAG_BIND_TEXT_SHORT)
sqlite3_bind_text(stmt, ++bind_idx, data,
(p_data - data) + length,
free);
else
sqlite3_bind_blob(stmt, ++bind_idx, data,
(p_data - data) + length,
free);
} else
free(data);
p_data = data = NULL;
break;
default:
LOG_AND_FAIL("Unrecognized tag: %d", tag);
}
} while (tag != MMBAK_TAG_END_SQL);
if (stmt && sqlite3_finalize(stmt) != SQLITE_OK)
SQLITE_FAIL_GETMSG(tag, "(FINALIZE)", ctx->db);
break;
default:
LOG_AND_FAIL("Unrecognized tag: %d", tag);
}
}
return MMBAK_RET_CANCELED;
bail:
if (data && data != databuf)
free(data);
if (errmsg)
sqlite3_free(errmsg);
if (stmt)
sqlite3_finalize(stmt);
LOGE("Fatal Offset [in: %lu, out: %lu]", ctx->zstrm.total_in,
ctx->zstrm.total_out);
return MMBAK_RET_FAILED;
}
mm_recover_ctx *mm_recover_init(const char *in_path,
const unsigned char *key,
int key_len,
mm_logfunc logfunc)
{
if (!logfunc)
logfunc = dummy_log;
mm_recover_ctx *ctx = (mm_recover_ctx *) malloc(sizeof(mm_recover_ctx));
if (!ctx) {
logfunc(MMBAK_LOG_ERROR, "Memory allocation failed.");
return NULL;
}
memset(ctx, 0, sizeof(mm_recover_ctx));
ctx->log = logfunc;
if (key && key_len > 0)
RC4_set_key(&ctx->rc4_template, key_len, key);
else
ctx->flags |= MMBAK_FLAG_NO_CIPHER;
ctx->fp = fopen(in_path, "rb");
if (!ctx->fp)
LOG_AND_FAIL("Cannot open file '%s' for reading: %s", in_path,
strerror(errno));
// read header from dump file.
if (read_header(ctx) != 0)
goto bail;
LOGI("Database recover context initialized. [input: %s]", in_path);
return ctx;
bail:
if (ctx) {
inflateEnd(&ctx->zstrm);
if (ctx->fp)
fclose(ctx->fp);
free(ctx);
}
return NULL;
}
int mm_recover_run(mm_recover_ctx *ctx, sqlite3 *db, int fatal)
{
mm_backup_section section;
int ret = MMBAK_RET_FAILED;
char *errmsg = NULL;
ctx->db = db;
const char *dbfile = sqlite3_db_filename(db, "main");
LOGI("Database recover started. [db: %s]",
dbfile ? dbfile : "(temp or memory)");
// run startup SQLs.
if (sqlite3_exec(db, "PRAGMA foreign_keys=OFF; BEGIN TRANSACTION;", 0, 0,
&errmsg) != SQLITE_OK)
LOG_AND_FAIL("Cannot execute startup SQL: %s",
errmsg ? errmsg : "Unknown");
ctx->succ_count = 0;
ctx->fail_count = 0;
ctx->section_count = 0;
while ((ret = fread(§ion, sizeof(section), 1, ctx->fp)) == 1) {
ctx->flags = section.flags;
ctx->sec_size = section.sec_size;
ctx->section_count++;
// re-initialize inflate and key context.
if (Z_OK != inflateInit(&ctx->zstrm))
LOG_AND_FAIL("Failed to initialize inflate context.");
ctx->zstrm.next_in = ctx->in_buf;
ctx->zstrm.avail_in = 0;
if (!(ctx->flags & MMBAK_FLAG_NO_CIPHER))
memcpy(&ctx->rc4_key, &ctx->rc4_template, sizeof(RC4_KEY));
// read and run dump tags.
ret = dump_read_and_run_tag(ctx, fatal);
if (ret != MMBAK_RET_OK)
break;
}
// run endup SQLs.
if (sqlite3_exec(db, "COMMIT;", 0, 0, &errmsg) != SQLITE_OK)
LOG_AND_FAIL("Cannot execute 'COMMIT': %s",
errmsg ? errmsg : "Unknown");
LOGI("Database recover %s. [sections: %u, succeeded: %u, failed: %u]",
ret == MMBAK_RET_OK
? "finished"
: (ret == MMBAK_RET_CANCELED) ? "canceled" : "failed",
ctx->section_count, ctx->succ_count, ctx->fail_count);
return ret;
bail:
return MMBAK_RET_FAILED;
}
void mm_recover_cancel(mm_recover_ctx *ctx)
{
ctx->canceled = 1;
}
void mm_recover_finish(mm_recover_ctx *ctx)
{
if (ctx->fp)
fclose(ctx->fp);
inflateEnd(&ctx->zstrm);
free(ctx);
}
void mm_recover_statistics(mm_recover_ctx *ctx,
unsigned int *succeed,
unsigned int *failed)
{
if (succeed)
*succeed = ctx->succ_count;
if (failed)
*failed = ctx->fail_count;
}
const char *mm_recover_last_error(mm_recover_ctx *ctx)
{
return ctx->errmsg;
}
void mm_print_log(mm_logfunc logfunc, int prio, const char *fmt, ...)
{
char buf[2048];
va_list ap;
va_start(ap, fmt);
vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
logfunc(prio, buf);
}
void mm_print_err(mm_logfunc logfunc, char *errmsg, const char *fmt, ...)
{
// errmsg should be 2048 bytes long.
va_list ap;
va_start(ap, fmt);
vsnprintf(errmsg, 2048, fmt, ap);
va_end(ap);
logfunc(MMBAK_LOG_ERROR, errmsg);
}
void dummy_log(int prio, const char *msg)
{
// do nothing.
}
================================================
FILE: deprecated/android/addons/fts/fts3_tokenizer.h
================================================
/*
** 2006 July 10
**
** The author disclaims copyright to this source code.
**
*************************************************************************
** Defines the interface to tokenizers used by fulltext-search. There
** are three basic components:
**
** sqlite3_tokenizer_module is a singleton defining the tokenizer
** interface functions. This is essentially the class structure for
** tokenizers.
**
** sqlite3_tokenizer is used to define a particular tokenizer, perhaps
** including customization information defined at creation time.
**
** sqlite3_tokenizer_cursor is generated by a tokenizer to generate
** tokens from a particular input.
*/
#ifndef _FTS3_TOKENIZER_H_
#define _FTS3_TOKENIZER_H_
/* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time.
** If tokenizers are to be allowed to call sqlite3_*() functions, then
** we will need a way to register the API consistently.
*/
#include "sqlite3.h"
/*
** Structures used by the tokenizer interface. When a new tokenizer
** implementation is registered, the caller provides a pointer to
** an sqlite3_tokenizer_module containing pointers to the callback
** functions that make up an implementation.
**
** When an fts3 table is created, it passes any arguments passed to
** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the
** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer
** implementation. The xCreate() function in turn returns an
** sqlite3_tokenizer structure representing the specific tokenizer to
** be used for the fts3 table (customized by the tokenizer clause arguments).
**
** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen()
** method is called. It returns an sqlite3_tokenizer_cursor object
** that may be used to tokenize a specific input buffer based on
** the tokenization rules supplied by a specific sqlite3_tokenizer
** object.
*/
typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
typedef struct sqlite3_tokenizer sqlite3_tokenizer;
typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
struct sqlite3_tokenizer_module {
/*
** Structure version. Should always be set to 0.
*/
int iVersion;
/*
** Create a new tokenizer. The values in the argv[] array are the
** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL
** TABLE statement that created the fts3 table. For example, if
** the following SQL is executed:
**
** CREATE .. USING fts3( ... , tokenizer <tokenizer-name> arg1 arg2)
**
** then argc is set to 2, and the argv[] array contains pointers
** to the strings "arg1" and "arg2".
**
** This method should return either SQLITE_OK (0), or an SQLite error
** code. If SQLITE_OK is returned, then *ppTokenizer should be set
** to point at the newly created tokenizer structure. The generic
** sqlite3_tokenizer.pModule variable should not be initialised by
** this callback. The caller will do so.
*/
int (*xCreate)(
int argc, /* Size of argv array */
const char *const*argv, /* Tokenizer argument strings */
sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */
);
/*
** Destroy an existing tokenizer. The fts3 module calls this method
** exactly once for each successful call to xCreate().
*/
int (*xDestroy)(sqlite3_tokenizer *pTokenizer);
/*
** Create a tokenizer cursor to tokenize an input buffer. The caller
** is responsible for ensuring that the input buffer remains valid
** until the cursor is closed (using the xClose() method).
*/
int (*xOpen)(
sqlite3_tokenizer *pTokenizer, /* Tokenizer object */
const char *pInput, int nBytes, /* Input buffer */
sqlite3_tokenizer_cursor **ppCursor /* OUT: Created tokenizer cursor */
);
/*
** Destroy an existing tokenizer cursor. The fts3 module calls this
** method exactly once for each successful call to xOpen().
*/
int (*xClose)(sqlite3_tokenizer_cursor *pCursor);
/*
** Retrieve the next token from the tokenizer cursor pCursor. This
** method should either return SQLITE_OK and set the values of the
** "OUT" variables identified below, or SQLITE_DONE to indicate that
** the end of the buffer has been reached, or an SQLite error code.
**
** *ppToken should be set to point at a buffer containing the
** normalized version of the token (i.e. after any case-folding and/or
** stemming has been performed). *pnBytes should be set to the length
** of this buffer in bytes. The input text that generated the token is
** identified by the byte offsets returned in *piStartOffset and
** *piEndOffset. *piStartOffset should be set to the index of the first
** byte of the token in the input buffer. *piEndOffset should be set
** to the index of the first byte just past the end of the token in
** the input buffer.
**
** The buffer *ppToken is set to point at is managed by the tokenizer
** implementation. It is only required to be valid until the next call
** to xNext() or xClose().
*/
/* TODO(shess) current implementation requires pInput to be
** nul-terminated. This should either be fixed, or pInput/nBytes
** should be converted to zInput.
*/
int (*xNext)(
sqlite3_tokenizer_cursor *pCursor, /* Tokenizer cursor */
const char **ppToken, int *pnBytes, /* OUT: Normalized text for token */
int *piStartOffset, /* OUT: Byte offset of token in input buffer */
int *piEndOffset, /* OUT: Byte offset of end of token in input buffer */
int *piPosition /* OUT: Number of tokens returned before this one */
);
};
struct sqlite3_tokenizer {
const sqlite3_tokenizer_module *pModule; /* The module for this tokenizer */
/* Tokenizer implementations will typically add additional fields */
};
struct sqlite3_tokenizer_cursor {
sqlite3_tokenizer *pTokenizer; /* Tokenizer for this cursor. */
/* Tokenizer implementations will typically add additional fields */
};
int fts3_global_term_cnt(int iTerm, int iCol);
int fts3_term_cnt(int iTerm, int iCol);
#endif /* _FTS3_TOKENIZER_H_ */
================================================
FILE: deprecated/android/addons/fts/mm_cipher.c
================================================
/*
* 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.
*/
#include "mm_fts.h"
#include <icucompat.h>
#include <openssl/rc4.h>
#include <stdlib.h>
#include <string.h>
#include <unicode/ucnv.h>
typedef struct mm_cipher_context_t {
int ref_count;
UConverter *cnv;
uint8_t key[16];
} mm_cipher_context_t;
static void do_rc4(mm_cipher_context_t *ctx, void *buf, int buf_len)
{
RC4_KEY rc4_key;
RC4_set_key(&rc4_key, 16, ctx->key);
RC4(&rc4_key, (size_t) buf_len, (const unsigned char *) buf,
(unsigned char *) buf);
}
static void mmenc_func(sqlite3_context *db, int argc, sqlite3_value **argv)
{
mm_cipher_context_t *ctx;
const UChar *src;
int32_t src_len;
char buf[1024];
char *dst = buf;
int32_t dst_len;
UErrorCode status = U_ZERO_ERROR;
int arg_type;
// only accept 1 argument.
if (argc != 1)
goto error_misuse;
// encoding BLOB data type is not supported.
arg_type = sqlite3_value_type(argv[0]);
if (arg_type == SQLITE_BLOB)
goto error_misuse;
// for data types other than TEXT, just return them.
if (arg_type != SQLITE_TEXT) {
sqlite3_result_value(db, argv[0]);
return;
}
ctx = (mm_cipher_context_t *) sqlite3_user_data(db);
src_len = sqlite3_value_bytes16(argv[0]) / 2;
src = (const UChar *) sqlite3_value_text16(argv[0]);
// transform input string to BOCU-1 encoding.
// try stack buffer first, if it doesn't fit, malloc a new buffer.
dst_len =
ucnv_fromUChars(ctx->cnv, dst, sizeof(buf), src, src_len, &status);
if (status == U_BUFFER_OVERFLOW_ERROR) {
status = U_ZERO_ERROR;
dst = (char *) sqlite3_malloc(dst_len);
dst_len =
ucnv_fromUChars(ctx->cnv, dst, dst_len, src, src_len, &status);
}
if (U_FAILURE(status) && status != U_STRING_NOT_TERMINATED_WARNING) {
sqlite3_mm_set_last_error(
"Failed transforming text to internal encoding.");
goto error_error;
}
// encrypt transformed BOCU-1 string.
do_rc4(ctx, dst, dst_len);
// return
sqlite3_result_blob(db, dst, dst_len, SQLITE_TRANSIENT);
if (dst != buf)
sqlite3_free(dst);
return;
error_error:
if (dst != buf)
sqlite3_free(dst);
sqlite3_result_error_code(db, SQLITE_ERROR);
return;
error_misuse:
if (dst != buf)
sqlite3_free(dst);
sqlite3_result_error_code(db, SQLITE_MISUSE);
return;
}
static void mmdec_func(sqlite3_context *db, int argc, sqlite3_value **argv)
{
mm_cipher_context_t *ctx;
char src_buf[1024];
char *src = src_buf;
int32_t src_len;
UChar buf[512];
UChar *dst = buf;
int32_t dst_len;
UErrorCode status = U_ZERO_ERROR;
int arg_type;
// only accept 1 argument.
if (argc != 1)
goto error_misuse;
arg_type = sqlite3_value_type(argv[0]);
// for data types other than BLOB, just return them.
if (arg_type != SQLITE_BLOB) {
sqlite3_result_value(db, argv[0]);
return;
}
ctx = (mm_cipher_context_t *) sqlite3_user_data(db);
src_len = sqlite3_value_bytes(argv[0]);
if (src_len > sizeof(src_buf)) {
src = (char *) sqlite3_malloc(src_len);
if (!src)
goto error_error;
}
memcpy(src, sqlite3_value_blob(argv[0]), src_len);
// decrypt transformed BOCU-1 string.
do_rc4(ctx, src, src_len);
// transform input string from BOCU-1 encoding.
// try stack buffer first, if it doesn't fit, malloc a new buffer.
dst_len = ucnv_toUChars(ctx->cnv, dst, sizeof(buf), src, src_len, &status);
if (status == U_BUFFER_OVERFLOW_ERROR) {
status = U_ZERO_ERROR;
dst = (UChar *) sqlite3_malloc(dst_len * sizeof(UChar));
dst_len = ucnv_toUChars(ctx->cnv, dst, dst_len, src, src_len, &status);
}
if (U_FAILURE(status) && status != U_STRING_NOT_TERMINATED_WARNING) {
sqlite3_mm_set_last_error(
"Failed transforming text from internal encoding.");
goto error_error;
}
// return
sqlite3_result_text16(db, dst, dst_len * sizeof(UChar), SQLITE_TRANSIENT);
if (src != src_buf)
sqlite3_free(src);
if (dst != buf)
sqlite3_free(dst);
return;
error_error:
if (src != src_buf)
sqlite3_free(src);
if (dst != buf)
sqlite3_free(dst);
sqlite3_result_error_code(db, SQLITE_ERROR);
return;
error_misuse:
if (src != src_buf)
sqlite3_free(src);
if (dst != buf)
sqlite3_free(dst);
sqlite3_result_error_code(db, SQLITE_MISUSE);
return;
}
static void
mm_cipher_key_func(sqlite3_context *db, int argc, sqlite3_value **argv)
{
mm_cipher_context_t *ctx;
// only accept 1 BLOB argument.
if (argc != 1)
goto error_misuse;
if (sqlite3_value_type(argv[0]) != SQLITE_BLOB)
goto error_misuse;
if (sqlite3_value_bytes(argv[0]) != 16)
goto error_misuse;
ctx = (mm_cipher_context_t *) sqlite3_user_data(db);
memcpy(ctx->key, sqlite3_value_blob(argv[0]), 16);
sqlite3_result_null(db);
return;
error_misuse:
sqlite3_result_error_code(db, SQLITE_MISUSE);
return;
}
static void mm_func_destroy(void *ptr)
{
mm_cipher_context_t *ctx = (mm_cipher_context_t *) ptr;
if (--ctx->ref_count == 0) {
ucnv_close(ctx->cnv);
sqlite3_free(ctx);
}
}
int sqlite3_register_mm_cipher(sqlite3 *db, const unsigned char *key)
{
UErrorCode status = U_ZERO_ERROR;
int sqlite_err;
mm_cipher_context_t *ctx;
// XXX: if we failed to load ICU functions, just skip initializing.
if (!ucnv_openCCSID)
return SQLITE_OK;
ctx = sqlite3_malloc(sizeof(mm_cipher_context_t));
if (!ctx)
return SQLITE_NOMEM;
sqlite_err = SQLITE_ERROR;
// open converter using CCSID instead of converter name to hide "BOCU-1" string.
ctx->cnv = ucnv_openCCSID(1214, UCNV_IBM, &status);
if (!ctx->cnv)
goto error;
memcpy(ctx->key, key, 16);
ctx->ref_count = 3;
sqlite_err =
sqlite3_create_function_v2(db, "mmenc", 1, SQLITE_ANY, ctx, mmenc_func,
NULL, NULL, mm_func_destroy);
if (sqlite_err != SQLITE_OK)
goto error;
sqlite_err =
sqlite3_create_function_v2(db, "mmdec", 1, SQLITE_ANY, ctx, mmdec_func,
NULL, NULL, mm_func_destroy);
if (sqlite_err != SQLITE_OK)
goto error;
sqlite_err = sqlite3_create_function_v2(db, "mm_cipher_key", 1, SQLITE_ANY,
ctx, mm_cipher_key_func, NULL, NULL,
mm_func_destroy);
if (sqlite_err != SQLITE_OK)
goto error;
return SQLITE_OK;
error:
if (ctx)
sqlite3_free(ctx);
return sqlite_err;
}
int sqlite3_mm_set_cipher_key(sqlite3 *db, const void *key, int key_len)
{
sqlite3_stmt *stmt;
int ret =
sqlite3_prepare_v2(db, "SELECT mm_cipher_key(?)", -1, &stmt, NULL);
if (ret != SQLITE_OK)
return ret;
sqlite3_bind_blob(stmt, 1, key, key_len, SQLITE_STATIC);
sqlite3_step(stmt);
return sqlite3_finalize(stmt);
}
================================================
FILE: deprecated/android/addons/fts/mm_fts.h
================================================
/*
* 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 __MM_FTS_H__
#define __MM_FTS_H__
#include <sqlite3ext.h>
SQLITE_EXTENSION_INIT3
#ifdef __cplusplus
extern "C" {
#endif
int sqlite3_mmftsext_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi);
int sqlite3_register_mm_tokenizer(sqlite3 *db);
int sqlite3_register_mm_cipher(sqlite3 *db, const unsigned char *key);
int sqlite3_register_mm_utils(sqlite3 *db);
int sqlite3_mm_set_cipher_key(sqlite3 *db, const void *key, int key_len);
void sqlite3_mm_set_last_error(const char *fmt, ...);
void sqlite3_mm_clear_error();
#ifdef __cplusplus
}
#endif
#endif // __MM_FTS_H__
================================================
FILE: deprecated/android/addons/fts/mm_sqliteext.c
================================================
/*
* 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.
*/
#include <sqlite3ext.h>
SQLITE_EXTENSION_INIT1
#include "mm_fts.h"
#include <icucompat.h>
const static uint8_t g_default_key[16] = {0x8e, 0x65, 0xd8, 0x50, 0x1f, 0x94,
0x06, 0x22, 0xfa, 0x45, 0x68, 0xb6,
0x69, 0x56, 0x34, 0x9c};
#ifdef _WIN32
__declspec(dllexport)
#endif
int sqlite3_mmftsext_init(sqlite3 *db,
char **pzErrMsg,
const sqlite3_api_routines *pApi)
{
int rc;
const char *errmsg;
SQLITE_EXTENSION_INIT2(pApi);
// Load and initialize ICU library.
if (init_icucompat() != 0) {
*pzErrMsg = sqlite3_mprintf("failed to load ICU library.");
return SQLITE_ERROR;
}
// Register tokenizer.
rc = sqlite3_register_mm_tokenizer(db);
if (rc != SQLITE_OK)
goto bail;
// Register text cipher.
rc = sqlite3_register_mm_cipher(db, g_default_key);
if (rc != SQLITE_OK)
goto bail;
// Register utility functions.
rc = sqlite3_register_mm_utils(db);
if (rc != SQLITE_OK)
goto bail;
*pzErrMsg = NULL;
return SQLITE_OK;
bail:
errmsg = sqlite3_errmsg(db);
if (!errmsg)
errmsg = "";
*pzErrMsg = sqlite3_mprintf(
"Failed to register SQLite functions: %s, ErrCode: %d", errmsg, rc);
return rc;
}
================================================
FILE: deprecated/android/addons/fts/mm_tokenizer.c
================================================
/*
* 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.
*/
#include "fts3_tokenizer.h"
#include "mm_fts.h"
#include <icucompat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unicode/ubrk.h>
#include <unicode/unorm.h>
#include <unicode/utf16.h>
#include <unicode/utf8.h>
#ifdef _WIN32
#include <malloc.h>
#endif
#define ROUND4(n) (((n) + 3) & ~3)
typedef struct mm_tokenizer_t {
sqlite3_tokenizer base;
char locale[16];
} mm_tokenizer_t;
typedef struct mm_cursor_t {
sqlite3_tokenizer_cursor base;
UBreakIterator *iter; // UBreakIterator for the text.
UChar *in_buffer; // whole input text buffer, in UTF-16,
// allocated altogather with mm_cursor_t.
int *in_offset;
int in_length; // input text length.
char *out_buffer; // output token buffer, int UTF-8,
// allocated in mmtok_next.
int out_length; // output token buffer length.
int token_count;
int32_t ideo_start; // ideographic unary/binary tokenizing cursor.
int32_t ideo_end; // ideographic unary/binary tokenizing end point.
int ideo_state; // 0 for unary output, -1 for invalid status.
} mm_cursor_t;
#define MINIMAL_OUT_BUFFER_LENGTH 512
static char *generate_token_printable_code(const UChar *buf, int32_t length)
{
char *out = (char *) malloc(length * 5 + 1);
char *pc = out;
if (!out)
return "";
while (length > 0) {
snprintf(pc, 6, "%04hX ", *buf);
length--;
buf++;
pc += 5;
}
return out;
}
static int output_token(mm_cursor_t *cur,
int32_t start,
int32_t end,
const char **ppToken,
int *pnBytes,
int *piStartOffset,
int *piEndOffset,
int *piPosition)
{
UChar buf1[256];
UChar buf2[256];
UErrorCode status = U_ZERO_ERROR;
int32_t result;
int32_t length;
length = end - start;
if (length > 256)
length = 256;
result = unorm_normalize(cur->in_buffer + start, length, UNORM_NFKD, 0,
buf1, sizeof(buf1) / sizeof(UChar), &status);
// currently, only try fixed length buffer, failed if overflowed.
if (U_FAILURE(status) || result > sizeof(buf1) / sizeof(UChar)) {
char *seq =
generate_token_printable_code(cur->in_buffer + start, length);
sqlite3_mm_set_last_error(
"Normalize token failed. ICU status: %d, input: %s", status, seq);
free(seq);
return SQLITE_ERROR;
}
length = result;
result = u_strFoldCase(buf2, sizeof(buf2) / sizeof(UChar), buf1, length,
U_FOLD_CASE_DEFAULT, &status);
// currently, only try fixed length buffer, failed if overflowed.
if (U_FAILURE(status) || result > sizeof(buf2) / sizeof(UChar)) {
char *seq = generate_token_printable_code(buf1, length);
sqlite3_mm_set_last_error(
"FoldCase token failed. ICU status: %d, input: %s", status, seq);
free(seq);
return SQLITE_ERROR;
}
if (cur->out_buffer == NULL) {
cur->out_buffer =
(char *) sqlite3_malloc(MINIMAL_OUT_BUFFER_LENGTH * sizeof(char));
if (!cur->out_buffer)
return SQLITE_NOMEM;
cur->out_length = MINIMAL_OUT_BUFFER_LENGTH;
}
length = result;
u_strToUTF8(cur->out_buffer, cur->out_length, &result, buf2, length,
&status);
if (result > cur->out_length) {
char *b =
(char *) sqlite3_realloc(cur->out_buffer, result * sizeof(char));
if (!b)
return SQLITE_NOMEM;
cur->out_buffer = b;
cur->out_length = result;
status = U_ZERO_ERROR;
u_strToUTF8(cur->out_buffer, cur->out_length, &result, buf2, length,
&status);
}
if (U_FAILURE(status) || result > cur->out_length) {
char *seq = generate_token_printable_code(buf2, length);
sqlite3_mm_set_last_error(
"Transform token to UTF-8 failed. ICU status: %d, input: %s",
status, seq);
free(seq);
return SQLITE_ERROR;
}
*ppToken = cur->out_buffer;
*pnBytes = result;
*piStartOffset = cur->in_offset[start];
*piEndOffset = cur->in_offset[end];
*piPosition = cur->token_count++;
return SQLITE_OK;
}
static int
find_splited_ideo_token(mm_cursor_t *cur, int32_t *start, int32_t *end)
{
int32_t s, e;
UChar32 c;
if (cur->ideo_state < 0)
return 0;
if (cur->ideo_start == cur->ideo_end) {
cur->ideo_state = -1;
return 0;
}
// check UTF-16 surrogates, output 2 UChars if it's a lead surrogates, otherwise 1.
s = cur->ideo_start;
e = s + 1;
c = cur->in_buffer[s];
if (U16_IS_LEAD(c) && cur->ideo_end - s >= 2)
e++;
*start = s;
*end = e;
cur->ideo_start = e;
return 1;
}
static int
mmtok_create(int argc, const char *const *argv, sqlite3_tokenizer **ppTokenizer)
{
mm_tokenizer_t *tok = sqlite3_malloc(sizeof(mm_tokenizer_t));
if (!tok)
return SQLITE_NOMEM;
if (argc > 0) {
strncpy(tok->locale, argv[0], 15);
tok->locale[15] = 0;
} else
tok->locale[0] = 0;
*ppTokenizer = (sqlite3_tokenizer *) tok;
return SQLITE_OK;
}
static int mmtok_destroy(sqlite3_tokenizer *pTokenizer)
{
mm_tokenizer_t *tok = (mm_tokenizer_t *) pTokenizer;
sqlite3_free(tok);
return SQLITE_OK;
}
static int mmtok_open(sqlite3_tokenizer *pTokenizer,
const char *zInput,
int nInput,
sqlite3_tokenizer_cursor **ppCursor)
{
mm_tokenizer_t *tok = (mm_tokenizer_t *) pTokenizer;
mm_cursor_t *cur;
int i_input;
int i_output;
UErrorCode status = U_ZERO_ERROR;
int32_t dst_len;
UChar32 c;
//__android_log_print(ANDROID_LOG_VERBOSE, "TOKENIZER", "Begin: %s", zInput);
if (nInput < 0)
nInput = strlen(zInput);
dst_len = ROUND4(nInput + 1);
cur = (mm_cursor_t *) sqlite3_malloc(
sizeof(mm_cursor_t) + dst_len * sizeof(UChar) // in_buffer
+ (dst_len + 1) * sizeof(int) // in_offset
);
if (!cur)
return SQLITE_NOMEM;
memset(cur, 0, sizeof(mm_cursor_t));
cur->in_buffer = (UChar *) &cur[1];
cur->in_offset = (int *) &cur->in_buffer[dst_len];
cur->out_buffer = NULL;
cur->out_length = 0;
cur->token_count = 0;
cur->ideo_start = -1;
cur->ideo_end = -1;
cur->ideo_state = -1;
i_input = 0;
i_output = 0;
cur->in_offset[i_output] = i_input;
for (;;) {
if (i_input >= nInput)
break;
U8_NEXT(zInput, i_input, nInput, c);
if (!c)
break;
if (c < 0)
c = ' ';
int is_error = 0;
U16_APPEND(cur->in_buffer, i_output, dst_len, c, is_error);
if (is_error) {
sqlite3_free(cur);
sqlite3_mm_set_last_error(
"Writing UTF-16 character failed. Code point: 0x%x", c);
return SQLITE_ERROR;
}
cur->in_offset[i_output] = i_input;
}
cur->iter =
ubrk_open(UBRK_WORD, tok->locale, cur->in_buffer, i_output, &status);
if (U_FAILURE(status)) {
sqlite3_mm_set_last_error(
"Open UBreakIterator failed. ICU error code: %d", status);
return SQLITE_ERROR;
}
cur->in_length = i_output;
ubrk_first(cur->iter);
*ppCursor = (sqlite3_tokenizer_cursor *) cur;
return SQLITE_OK;
}
static int mmtok_close(sqlite3_tokenizer_cursor *pCursor)
{
mm_cursor_t *cur = (mm_cursor_t *) pCursor;
ubrk_close(cur->iter);
if (cur->out_buffer)
sqlite3_free(cur->out_buffer);
sqlite3_free(cur);
return SQLITE_OK;
}
static int
mmtok_next(sqlite3_tokenizer_cursor *pCursor, // Cursor returned by simpleOpen
const char **ppToken, // OUT: *ppToken is the token text
int *pnBytes, // OUT: Number of bytes in token
int *piStartOffset, // OUT: Starting offset of token
int *piEndOffset, // OUT: Ending offset of token
int *piPosition // OUT: Position integer of token
)
{
mm_cursor_t *cur = (mm_cursor_t *) pCursor;
int32_t start, end;
int32_t token_type;
// process pending ideographic token.
if (find_splited_ideo_token(cur, &start, &end))
return output_token(cur, start, end, ppToken, pnBytes, piStartOffset,
piEndOffset, piPosition);
start = ubrk_current(cur->iter);
// find first non-NONE token.
for (;;) {
end = ubrk_next(cur->iter);
if (end == UBRK_DONE) {
sqlite3_mm_clear_error();
return SQLITE_DONE;
}
token_type = ubrk_getRuleStatus(cur->iter);
if (token_type >= UBRK_WORD_NONE && token_type < UBRK_WORD_NONE_LIMIT) {
// look at the first character, if it's a space or ZWSP, ignore this token.
// also ignore '*' because sqlite parser uses it as prefix operator.
UChar32 c = cur->in_buffer[start];
if (c == '*' || c == 0x200b || u_isspace(c)) {
start = end;
continue;
}
}
break;
}
// for non-IDEO tokens, just return.
if (token_type < UBRK_WORD_IDEO || token_type >= UBRK_WORD_IDEO_LIMIT)
return output_token(cur, start, end, ppToken, pnBytes, piStartOffset,
piEndOffset, piPosition);
// for IDEO tokens, find all suffix ideo tokens.
for (;;) {
int32_t e = ubrk_next(cur->iter);
if (e == UBRK_DONE)
break;
token_type = ubrk_getRuleStatus(cur->iter);
if (token_type < UBRK_WORD_IDEO || token_type >= UBRK_WORD_IDEO_LIMIT)
break;
end = e;
}
ubrk_isBoundary(cur->iter, end);
cur->ideo_start = start;
cur->ideo_end = end;
cur->ideo_state = 0;
if (find_splited_ideo_token(cur, &start, &end))
return output_token(cur, start, end, ppToken, pnBytes, piStartOffset,
piEndOffset, piPosition);
sqlite3_mm_set_last_error("IDEO token found but can't output token.");
return SQLITE_ERROR;
}
static const sqlite3_tokenizer_module mm_tokenizer_module = {
0, mmtok_create, mmtok_destroy, mmtok_open, mmtok_close, mmtok_next};
int sqlite3_register_mm_tokenizer(sqlite3 *db)
{
const sqlite3_tokenizer_module *module = &mm_tokenizer_module;
sqlite3_stmt *stmt = NULL;
int result;
result =
sqlite3_prepare_v2(db, "SELECT fts3_tokenizer(?, ?)", -1, &stmt, 0);
if (result != SQLITE_OK)
return result;
sqlite3_bind_text(stmt, 1, "mmicu", -1, SQLITE_STATIC);
sqlite3_bind_blob(stmt, 2, &module, sizeof(sqlite3_tokenizer_module *),
SQLITE_STATIC);
sqlite3_step(stmt);
return sqlite3_finalize(stmt);
}
================================================
FILE: deprecated/android/addons/fts/mm_utils.c
================================================
/*
* 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.
*/
#include "mm_fts.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
static char g_errmsg_buffer[1024];
void sqlite3_mm_set_last_error(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vsnprintf(g_errmsg_buffer, sizeof(g_errmsg_buffer), fmt, args);
g_errmsg_buffer[sizeof(g_errmsg_buffer) - 1] = 0;
va_end(args);
}
void sqlite3_mm_clear_error()
{
g_errmsg_buffer[0] = 0;
}
static void mm_last_error(sqlite3_context *db, int argc, sqlite3_value **argv)
{
sqlite3_result_text(db, g_errmsg_buffer, -1, SQLITE_STATIC);
}
int sqlite3_register_mm_utils(sqlite3 *db)
{
return sqlite3_create_function_v2(db, "mm_last_error", 0, SQLITE_ANY, NULL,
mm_last_error, NULL, NULL, NULL);
}
================================================
FILE: deprecated/android/addons/icucompat/icucompat.c
================================================
/*
* 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.
*/
#if defined(__ANDROID__) && !defined(WCDB_ICU_DIRECT_LINKING)
#define ICUCOMPAT_IMPL
#include "icucompat.h"
#include <dirent.h>
#include <dlfcn.h>
#include <stdio.h>
#include <string.h>
static void *s_libicuuc_so = NULL;
static void *s_libicui18n_so = NULL;
icu_compat_t __g_icucompat_iface__ = {0};
static void *
load_function(void *lib_handle, const char *func_name, const char *suffix)
{
char buf[128];
size_t len = strlcpy(buf, func_name, sizeof(buf));
strlcpy(buf + len, suffix, sizeof(buf) - len);
return dlsym(lib_handle, buf);
}
static void load_functions(const char *suffix)
{
#define ICUCOMPAT_UC_FUNC(ret_type, func_name, arg_list) \
(__g_icucompat_iface__.func_name##_) = \
(ret_type(*) arg_list) load_function(s_libicuuc_so, #func_name, \
suffix);
#define ICUCOMPAT_I18N_FUNC(ret_type, func_name, arg_list) \
(__g_icucompat_iface__.func_name##_) = \
(ret_type(*) arg_list) load_function(s_libicui18n_so, #func_name, \
suffix);
#include "icuprototype.h"
#undef ICUCOMPAT_UC_FUNC
#undef ICUCOMPAT_I18N_FUNC
}
static const char *find_icu_suffix(void *lib_handle, char *buf, size_t buflen)
{
DIR *icudir = opendir("/system/usr/icu");
if (!icudir)
return NULL;
struct dirent *dp;
while ((dp = readdir(icudir)) != NULL) {
if (dp->d_type == DT_REG) {
// Find /system/usr/icu/icudt??l.dat
const char *name = dp->d_name;
if (strlen(name) == 12 && !strncmp("icudt", name, 5) &&
name[5] >= '0' && name[5] <= '9' && name[6] >= '0' &&
name[6] <= '9' && !strncmp("l.dat", &name[7], 6)) {
snprintf(buf, buflen, "_%c%c", name[5], name[6]);
// Try loading with suffix.
if (load_function(lib_handle, "u_getVersion", buf)) {
closedir(icudir);
return buf;
}
}
}
}
closedir(icudir);
// Failed, try plain names without suffix.
if (load_function(lib_handle, "u_getVersion", "")) {
buf[0] = 0;
return buf;
}
return NULL;
}
int init_icucompat()
{
char suffix[16];
if (s_libicuuc_so || s_libicui18n_so)
return 0;
s_libicuuc_so = dlopen("libicuuc.so", RTLD_LAZY);
s_libicui18n_so = dlopen("libicui18n.so", RTLD_LAZY);
if (!s_libicuuc_so || !s_libicui18n_so)
goto bail;
if (!find_icu_suffix(s_libicuuc_so, suffix, sizeof(suffix)))
goto bail;
load_functions(suffix);
return 0;
bail:
if (s_libicuuc_so)
dlclose(s_libicuuc_so);
if (s_libicui18n_so)
dlclose(s_libicui18n_so);
s_libicuuc_so = NULL;
s_libicui18n_so = NULL;
return -1;
}
void destroy_icucompat()
{
if (s_libicuuc_so)
dlclose(s_libicuuc_so);
if (s_libicui18n_so)
dlclose(s_libicui18n_so);
s_libicuuc_so = NULL;
s_libicui18n_so = NULL;
}
#endif // defined(__ANDROID__) && !defined(WCDB_ICU_DIRECT_LINKING)
================================================
FILE: deprecated/android/addons/icucompat/icucompat.h
================================================
/*
* 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 __ICU_COMPAT_H__
#define __ICU_COMPAT_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Disable ICU export renaming. It will be replaced with icucompat macros. */
#define U_DISABLE_RENAMING 1
#include <unicode/ubrk.h>
#include <unicode/ucnv.h>
#include <unicode/ucol.h>
#include <unicode/uiter.h>
#include <unicode/umachine.h>
#include <unicode/unorm.h>
#include <unicode/ustring.h>
#include <unicode/utypes.h>
#include <unicode/uversion.h>
typedef struct icu_compat_t {
#define ICUCOMPAT_UC_FUNC(ret_type, func_name, arg_list) \
ret_type(U_EXPORT2 *func_name##_) arg_list;
#define ICUCOMPAT_I18N_FUNC(ret_type, func_name, arg_list) \
ret_type(U_EXPORT2 *func_name##_) arg_list;
#include "icuprototype.h"
#undef ICUCOMPAT_UC_FUNC
#undef ICUCOMPAT_I18N_FUNC
} icu_compat_t;
extern icu_compat_t __g_icucompat_iface__;
int init_icucompat();
void destroy_icucompat();
#ifndef ICUCOMPAT_IMPL
#define ICUCOMPAT_DEFINE_SYMBOL(symbol) (__g_icucompat_iface__.symbol##_)
#include "icuprototype.h"
#endif
#ifdef __cplusplus
}
#endif
#endif
================================================
FILE: deprecated/android/addons/icucompat/icuprototype.h
================================================
/*
* 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 ICUCOMPAT_UC_FUNC
#define ICUCOMPAT_UC_FUNC(ret_type, func_name, arg_list)
#endif
#ifndef ICUCOMPAT_I18N_FUNC
#define ICUCOMPAT_I18N_FUNC(ret_type, func_name, arg_list)
#endif
#ifdef ICUCOMPAT_DEFINE_SYMBOL
/* uversion functions */
#define u_getVersion ICUCOMPAT_DEFINE_SYMBOL(u_getVersion)
/* uchar functions */
#define u_isspace ICUCOMPAT_DEFINE_SYMBOL(u_isspace)
/* ustring functions */
#define u_strFoldCase ICUCOMPAT_DEFINE_SYMBOL(u_strFoldCase)
#define u_strToUTF8 ICUCOMPAT_DEFINE_SYMBOL(u_strToUTF8)
#define u_strtok_r ICUCOMPAT_DEFINE_SYMBOL(u_strtok_r)
/* utf8 functions */
#define utf8_nextCharSafeBody ICUCOMPAT_DEFINE_SYMBOL(utf8_nextCharSafeBody)
/* ubrk functions */
#define ubrk_open ICUCOMPAT_DEFINE_SYMBOL(ubrk_open)
#define ubrk_close ICUCOMPAT_DEFINE_SYMBOL(ubrk_close)
#define ubrk_setText ICUCOMPAT_DEFINE_SYMBOL(ubrk_setText)
#define ubrk_current ICUCOMPAT_DEFINE_SYMBOL(ubrk_current)
#define ubrk_next ICUCOMPAT_DEFINE_SYMBOL(ubrk_next)
#define ubrk_previous ICUCOMPAT_DEFINE_SYMBOL(ubrk_previous)
#define ubrk_first ICUCOMPAT_DEFINE_SYMBOL(ubrk_first)
#define ubrk_isBoundary ICUCOMPAT_DEFINE_SYMBOL(ubrk_isBoundary)
#define ubrk_getRuleStatus ICUCOMPAT_DEFINE_SYMBOL(ubrk_getRuleStatus)
/* unorm functions */
#define unorm_normalize ICUCOMPAT_DEFINE_SYMBOL(unorm_normalize)
/* ucnv functions */
#define ucnv_fromUChars ICUCOMPAT_DEFINE_SYMBOL(ucnv_fromUChars)
#define ucnv_toUChars ICUCOMPAT_DEFINE_SYMBOL(ucnv_toUChars)
#define ucnv_openCCSID ICUCOMPAT_DEFINE_SYMBOL(ucnv_openCCSID)
#define ucnv_close ICUCOMPAT_DEFINE_SYMBOL(ucnv_close)
/* uiter functions */
#define uiter_setUTF8 ICUCOMPAT_DEFINE_SYMBOL(uiter_setUTF8)
/* ucol functions */
#define ucol_strcoll ICUCOMPAT_DEFINE_SYMBOL(ucol_strcoll)
#define ucol_strcollIter ICUCOMPAT_DEFINE_SYMBOL(ucol_strcollIter)
#define ucol_getSortKey ICUCOMPAT_DEFINE_SYMBOL(ucol_getSortKey)
#define ucol_open ICUCOMPAT_DEFINE_SYMBOL(ucol_open)
#define ucol_setAttribute ICUCOMPAT_DEFINE_SYMBOL(ucol_setAttribute)
#define ucol_getShortDefinitionString ICUCOMPAT_DEFINE_SYMBOL(ucol_getShortDefinitionString)
#else
/* uversion functions */
ICUCOMPAT_UC_FUNC(void, u_getVersion, (UVersionInfo versionArray))
/* uchar functions */
ICUCOMPAT_UC_FUNC(UBool, u_isspace, (UChar32 c))
/* ustring functions */
ICUCOMPAT_UC_FUNC(int32_t, u_strFoldCase, (UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, uint32_t options, UErrorCode *pErrorCode))
ICUCOMPAT_UC_FUNC(char *, u_strToUTF8, (char *dest, int32_t destCapacity, int32_t *pDestLength, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode))
ICUCOMPAT_UC_FUNC(UChar *, u_strtok_r, (UChar *src, const UChar *delim, UChar **saveState))
/* utf8 functions */
ICUCOMPAT_UC_FUNC(UChar32, utf8_nextCharSafeBody, (const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict))
/* ubrk functions */
ICUCOMPAT_UC_FUNC(UBreakIterator *, ubrk_open, (UBreakIteratorType type, const char *locale, const UChar *text, int32_t textLength, UErrorCode *status))
ICUCOMPAT_UC_FUNC(void, ubrk_close, (UBreakIterator *bi))
ICUCOMPAT_UC_FUNC(void, ubrk_setText, (UBreakIterator* bi, const UChar* text, int32_t textLength, UErrorCode *status))
ICUCOMPAT_UC_FUNC(int32_t, ubrk_current, (const UBreakIterator *bi))
ICUCOMPAT_UC_FUNC(int32_t, ubrk_next, (UBreakIterator *bi))
ICUCOMPAT_UC_FUNC(int32_t, ubrk_previous, (UBreakIterator *bi))
ICUCOMPAT_UC_FUNC(int32_t, ubrk_first, (UBreakIterator *bi))
ICUCOMPAT_UC_FUNC(UBool, ubrk_isBoundary, (UBreakIterator *bi, int32_t offset))
ICUCOMPAT_UC_FUNC(int32_t, ubrk_getRuleStatus, (UBreakIterator *bi))
/* unorm functions */
ICUCOMPAT_UC_FUNC(int32_t, unorm_normalize, (const UChar *source, int32_t sourceLength, UNormalizationMode mode, int32_t options, UChar *result, int32_t resultLength, UErrorCode *status))
/* ucnv functions */
ICUCOMPAT_UC_FUNC(int32_t, ucnv_fromUChars, (UConverter *cnv, char *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode))
ICUCOMPAT_UC_FUNC(int32_t, ucnv_toUChars, (UConverter *cnv, UChar *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode))
ICUCOMPAT_UC_FUNC(UConverter *, ucnv_openCCSID, (int32_t codepage, UConverterPlatform platform, UErrorCode *err))
ICUCOMPAT_UC_FUNC(void, ucnv_close, (UConverter *converter))
/* uiter functions */
ICUCOMPAT_UC_FUNC(void, uiter_setUTF8, (UCharIterator *iter, const char *s, int32_t length))
/* ucol functions */
ICUCOMPAT_I18N_FUNC(UCollationResult, ucol_strcoll, (const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength))
ICUCOMPAT_I18N_FUNC(UCollationResult, ucol_strcollIter, (const UCollator *coll, UCharIterator *sIter, UCharIterator *tIter, UErrorCode *status))
ICUCOMPAT_I18N_FUNC(int32_t, ucol_getSortKey, (const UCollator *coll, const UChar *source, int32_t sourceLength, uint8_t *result, int32_t resultLength))
ICUCOMPAT_I18N_FUNC(UCollator*, ucol_open, (const char *loc, UErrorCode *status))
ICUCOMPAT_I18N_FUNC(void, ucol_setAttribute, (UCollator *coll, UColAttribute attr, UColAttributeValue value, UErrorCode *status))
ICUCOMPAT_I18N_FUNC(int32_t, ucol_getShortDefinitionString, (const UCollator *coll, const char *locale, char *buffer, int32_t capacity, UErrorCode *status))
#endif
================================================
FILE: deprecated/android/addons/icucompat/unicode/alphaindex.h
================================================
/*
*******************************************************************************
*
* Copyright (C) 2011-2013 International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
*/
#ifndef INDEXCHARS_H
#define INDEXCHARS_H
#include "unicode/utypes.h"
#include "unicode/uobject.h"
#include "unicode/locid.h"
#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_NORMALIZATION
/**
* \file
* \brief C++ API: Index Characters
*/
U_CDECL_BEGIN
/**
* Constants for Alphabetic Index Label Types.
* The form of these enum constants anticipates having a plain C API
* for Alphabetic Indexes that will also use them.
* @stable ICU 4.8
*/
typedef enum UAlphabeticIndexLabelType {
/**
* Normal Label, typically the starting letter of the names
* in the bucket with this label.
* @stable ICU 4.8
*/
U_ALPHAINDEX_NORMAL = 0,
/**
* Undeflow Label. The bucket with this label contains names
* in scripts that sort before any of the bucket labels in this index.
* @stable ICU 4.8
*/
U_ALPHAINDEX_UNDERFLOW = 1,
/**
* Inflow Label. The bucket with this label contains names
* in scripts that sort between two of the bucket labels in this index.
* Inflow labels are created when an index contains normal labels for
* multiple scripts, and skips other scripts that sort between some of the
* included scripts.
* @stable ICU 4.8
*/
U_ALPHAINDEX_INFLOW = 2,
/**
* Overflow Label. Te bucket with this label contains names in scripts
* that sort after all of the bucket labels in this index.
* @stable ICU 4.8
*/
U_ALPHAINDEX_OVERFLOW = 3
} UAlphabeticIndexLabelType;
struct UHashtable;
U_CDECL_END
U_NAMESPACE_BEGIN
// Forward Declarations
class BucketList;
class Collator;
class RuleBasedCollator;
class StringEnumeration;
class UnicodeSet;
class UVector;
/**
* AlphabeticIndex supports the creation of a UI index appropriate for a given language.
* It can support either direct use, or use with a client that doesn't support localized collation.
* The following is an example of what an index might look like in a UI:
*
* <pre>
* <b>... A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ...</b>
*
* <b>A</b>
* Addison
* Albertson
* Azensky
* <b>B</b>
* Baker
* ...
* </pre>
*
* The class can generate a list of labels for use as a UI "index", that is, a list of
* clickable characters (or character sequences) that allow the user to see a segment
* (bucket) of a larger "target" list. That is, each label corresponds to a bucket in
* the target list, where everything in the bucket is greater than or equal to the character
* (according to the locale's collation). Strings can be added to the index;
* they will be in sorted order in the right bucket.
* <p>
* The class also supports having buckets for strings before the first (underflow),
* after the last (overflow), and between scripts (inflow). For example, if the index
* is constructed with labels for Russian and English, Greek characters would fall
* into an inflow bucket between the other two scripts.
* <p>
* The AlphabeticIndex class is not intended for public subclassing.
*
* <p><em>Note:</em> If you expect to have a lot of ASCII or Latin characters
* as well as characters from the user's language,
* then it is a good idea to call addLabels(Locale::getEnglish(), status).</p>
*
* <h2>Direct Use</h2>
* <p>The following shows an example of building an index directly.
* The "show..." methods below are just to illustrate usage.
*
* <pre>
* // Create a simple index. "Item" is assumed to be an application
* // defined type that the application's UI and other processing knows about,
* // and that has a name.
*
* UErrorCode status = U_ZERO_ERROR;
* AlphabeticIndex index = new AlphabeticIndex(desiredLocale, status);
* index->addLabels(additionalLocale, status);
* for (Item *item in some source of Items ) {
* index->addRecord(item->name(), item, status);
* }
* ...
* // Show index at top. We could skip or gray out empty buckets
*
* while (index->nextBucket(status)) {
* if (showAll || index->getBucketRecordCount() != 0) {
* showLabelAtTop(UI, index->getBucketLabel());
* }
* }
* ...
* // Show the buckets with their contents, skipping empty buckets
*
* index->resetBucketIterator(status);
* while (index->nextBucket(status)) {
* if (index->getBucketRecordCount() != 0) {
* showLabelInList(UI, index->getBucketLabel());
* while (index->nextRecord(status)) {
* showIndexedItem(UI, static_cast<Item *>(index->getRecordData()))
* </pre>
*
* The caller can build different UIs using this class.
* For example, an index character could be omitted or grayed-out
* if its bucket is empty. Small buckets could also be combined based on size, such as:
*
* <pre>
* <b>... A-F G-N O-Z ...</b>
* </pre>
*
* <h2>Client Support</h2>
* <p>Callers can also use the AlphabeticIndex::ImmutableIndex, or the AlphabeticIndex itself,
* to support sorting on a client that doesn't support AlphabeticIndex functionality.
*
* <p>The ImmutableIndex is both immutable and thread-safe.
* The corresponding AlphabeticIndex methods are not thread-safe because
* they "lazily" build the index buckets.
* <ul>
* <li>ImmutableIndex.getBucket(index) provides random access to all
* buckets and their labels and label types.
* <li>The AlphabeticIndex bucket iterator or ImmutableIndex.getBucket(0..getBucketCount-1)
* can be used to get a list of the labels,
* such as "...", "A", "B",..., and send that list to the client.
* <li>When the client has a new name, it sends that name to the server.
* The server needs to call the following methods,
* and communicate the bucketIndex and collationKey back to the client.
*
* <pre>
* int32_t bucketIndex = index.getBucketIndex(name, status);
* const UnicodeString &label = immutableIndex.getBucket(bucketIndex)->getLabel(); // optional
* int32_t skLength = collator.getSortKey(name, sk, skCapacity);
* </pre>
*
* <li>The client would put the name (and associated information) into its bucket for bucketIndex. The sort key sk is a
* sequence of bytes that can be compared with a binary compare, and produce the right localized result.</li>
* </ul>
*
* @stable ICU 4.8
*/
class U_I18N_API AlphabeticIndex: public UObject {
public:
#ifdef U_HIDE_DRAFT_API
class Bucket;
#else
/**
* An index "bucket" with a label string and type.
* It is referenced by getBucketIndex(),
* and returned by ImmutableIndex.getBucket().
*
* The Bucket class is not intended for public subclassing.
* @draft ICU 51
*/
class U_I18N_API Bucket : public UObject {
public:
/**
* Destructor.
* @draft ICU 51
*/
virtual ~Bucket();
/**
* Returns the label string.
*
* @return the label string for the bucket
* @draft ICU 51
*/
const UnicodeString &getLabel() const { return label_; }
/**
* Returns whether this bucket is a normal, underflow, overflow, or inflow bucket.
*
* @return the bucket label type
* @draft ICU 51
*/
UAlphabeticIndexLabelType getLabelType() const { return labelType_; }
private:
friend class AlphabeticIndex;
friend class BucketList;
UnicodeString label_;
UnicodeString lowerBoundary_;
UAlphabeticIndexLabelType labelType_;
Bucket *displayBucket_;
int32_t displayIndex_;
UVector *records_; // Records are owned by the inputList_ vector.
Bucket(const UnicodeString &label, // Parameter strings are copied.
const UnicodeString &lowerBoundary,
UAlphabeticIndexLabelType type);
};
/**
* Immutable, thread-safe version of AlphabeticIndex.
* This class provides thread-safe methods for bucketing,
* and random access to buckets and their properties,
* but does not offer adding records to the index.
*
* The ImmutableIndex class is not intended for public subclassing.
*
* @draft ICU 51
*/
class U_I18N_API ImmutableIndex : public UObject {
public:
/**
* Destructor.
* @draft ICU 51
*/
virtual ~ImmutableIndex();
/**
* Returns the number of index buckets and labels, including underflow/inflow/overflow.
*
* @return the number of index buckets
* @draft ICU 51
*/
int32_t getBucketCount() const;
/**
* Finds the index bucket for the given name and returns the number of that bucket.
* Use getBucket() to get the bucket's properties.
*
* @param name the string to be sorted into an index bucket
* @return the bucket number for the name
* @draft ICU 51
*/
int32_t getBucketIndex(const UnicodeString &name, UErrorCode &errorCode) const;
/**
* Returns the index-th bucket. Returns NULL if the index is out of range.
*
* @param index bucket number
* @return the index-th bucket
* @draft ICU 51
*/
const Bucket *getBucket(int32_t index) const;
private:
friend class AlphabeticIndex;
ImmutableIndex(BucketList *bucketList, Collator *collatorPrimaryOnly)
: buckets_(bucketList), collatorPrimaryOnly_(collatorPrimaryOnly) {}
BucketList *buckets_;
Collator *collatorPrimaryOnly_;
};
#endif /* U_HIDE_DRAFT_API */
/**
* Construct an AlphabeticIndex object for the specified locale. If the locale's
* data does not include index characters, a set of them will be
* synthesized based on the locale's exemplar characters. The locale
* determines the sorting order for both the index characters and the
* user ite
gitextract__428ffi_/
├── .clang-format
├── .github/
│ └── stale.yml
├── .gitignore
├── .gitmodules
├── .swift-version
├── CHANGELOG.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── Package.swift
├── README.md
├── VERSION
├── WCDB.cpp.podspec
├── WCDB.objc.podspec
├── WCDB.podspec
├── WCDB.swift.podspec
├── deprecated/
│ └── android/
│ ├── .gitignore
│ ├── Android.mk
│ ├── Application.mk
│ ├── addons/
│ │ ├── backup/
│ │ │ ├── mm_backup.c
│ │ │ ├── mm_backup.h
│ │ │ └── mm_recover.c
│ │ ├── fts/
│ │ │ ├── fts3_tokenizer.h
│ │ │ ├── mm_cipher.c
│ │ │ ├── mm_fts.h
│ │ │ ├── mm_sqliteext.c
│ │ │ ├── mm_tokenizer.c
│ │ │ └── mm_utils.c
│ │ ├── icucompat/
│ │ │ ├── icucompat.c
│ │ │ ├── icucompat.h
│ │ │ ├── icuprototype.h
│ │ │ └── unicode/
│ │ │ ├── alphaindex.h
│ │ │ ├── appendable.h
│ │ │ ├── basictz.h
│ │ │ ├── bms.h
│ │ │ ├── bmsearch.h
│ │ │ ├── brkiter.h
│ │ │ ├── bytestream.h
│ │ │ ├── bytestrie.h
│ │ │ ├── bytestriebuilder.h
│ │ │ ├── calendar.h
│ │ │ ├── caniter.h
│ │ │ ├── chariter.h
│ │ │ ├── choicfmt.h
│ │ │ ├── coleitr.h
│ │ │ ├── coll.h
│ │ │ ├── colldata.h
│ │ │ ├── curramt.h
│ │ │ ├── currpinf.h
│ │ │ ├── currunit.h
│ │ │ ├── datefmt.h
│ │ │ ├── dbbi.h
│ │ │ ├── dcfmtsym.h
│ │ │ ├── decimfmt.h
│ │ │ ├── docmain.h
│ │ │ ├── dtfmtsym.h
│ │ │ ├── dtintrv.h
│ │ │ ├── dtitvfmt.h
│ │ │ ├── dtitvinf.h
│ │ │ ├── dtptngen.h
│ │ │ ├── dtrule.h
│ │ │ ├── enumset.h
│ │ │ ├── errorcode.h
│ │ │ ├── fieldpos.h
│ │ │ ├── fmtable.h
│ │ │ ├── format.h
│ │ │ ├── fpositer.h
│ │ │ ├── gender.h
│ │ │ ├── gregocal.h
│ │ │ ├── icudataver.h
│ │ │ ├── icuplug.h
│ │ │ ├── idna.h
│ │ │ ├── listformatter.h
│ │ │ ├── localpointer.h
│ │ │ ├── locdspnm.h
│ │ │ ├── locid.h
│ │ │ ├── measfmt.h
│ │ │ ├── measunit.h
│ │ │ ├── measure.h
│ │ │ ├── messagepattern.h
│ │ │ ├── msgfmt.h
│ │ │ ├── normalizer2.h
│ │ │ ├── normlzr.h
│ │ │ ├── numfmt.h
│ │ │ ├── numsys.h
│ │ │ ├── parseerr.h
│ │ │ ├── parsepos.h
│ │ │ ├── platform.h
│ │ │ ├── plurfmt.h
│ │ │ ├── plurrule.h
│ │ │ ├── ptypes.h
│ │ │ ├── putil.h
│ │ │ ├── rbbi.h
│ │ │ ├── rbnf.h
│ │ │ ├── rbtz.h
│ │ │ ├── regex.h
│ │ │ ├── rep.h
│ │ │ ├── resbund.h
│ │ │ ├── schriter.h
│ │ │ ├── search.h
│ │ │ ├── selfmt.h
│ │ │ ├── simpletz.h
│ │ │ ├── smpdtfmt.h
│ │ │ ├── sortkey.h
│ │ │ ├── std_string.h
│ │ │ ├── strenum.h
│ │ │ ├── stringpiece.h
│ │ │ ├── stringtriebuilder.h
│ │ │ ├── stsearch.h
│ │ │ ├── symtable.h
│ │ │ ├── tblcoll.h
│ │ │ ├── timezone.h
│ │ │ ├── tmunit.h
│ │ │ ├── tmutamt.h
│ │ │ ├── tmutfmt.h
│ │ │ ├── translit.h
│ │ │ ├── tzfmt.h
│ │ │ ├── tznames.h
│ │ │ ├── tzrule.h
│ │ │ ├── tztrans.h
│ │ │ ├── ubidi.h
│ │ │ ├── ubrk.h
│ │ │ ├── ucal.h
│ │ │ ├── ucasemap.h
│ │ │ ├── ucat.h
│ │ │ ├── uchar.h
│ │ │ ├── ucharstrie.h
│ │ │ ├── ucharstriebuilder.h
│ │ │ ├── uchriter.h
│ │ │ ├── uclean.h
│ │ │ ├── ucnv.h
│ │ │ ├── ucnv_cb.h
│ │ │ ├── ucnv_err.h
│ │ │ ├── ucnvsel.h
│ │ │ ├── ucol.h
│ │ │ ├── ucoleitr.h
│ │ │ ├── uconfig.h
│ │ │ ├── ucsdet.h
│ │ │ ├── ucurr.h
│ │ │ ├── udat.h
│ │ │ ├── udata.h
│ │ │ ├── udateintervalformat.h
│ │ │ ├── udatpg.h
│ │ │ ├── udisplaycontext.h
│ │ │ ├── uenum.h
│ │ │ ├── ugender.h
│ │ │ ├── uidna.h
│ │ │ ├── uiter.h
│ │ │ ├── uldnames.h
│ │ │ ├── uloc.h
│ │ │ ├── ulocdata.h
│ │ │ ├── umachine.h
│ │ │ ├── umisc.h
│ │ │ ├── umsg.h
│ │ │ ├── unifilt.h
│ │ │ ├── unifunct.h
│ │ │ ├── unimatch.h
│ │ │ ├── unirepl.h
│ │ │ ├── uniset.h
│ │ │ ├── unistr.h
│ │ │ ├── unorm.h
│ │ │ ├── unorm2.h
│ │ │ ├── unum.h
│ │ │ ├── uobject.h
│ │ │ ├── upluralrules.h
│ │ │ ├── uregex.h
│ │ │ ├── urename.h
│ │ │ ├── urep.h
│ │ │ ├── ures.h
│ │ │ ├── uscript.h
│ │ │ ├── usearch.h
│ │ │ ├── uset.h
│ │ │ ├── usetiter.h
│ │ │ ├── ushape.h
│ │ │ ├── uspoof.h
│ │ │ ├── usprep.h
│ │ │ ├── ustring.h
│ │ │ ├── ustringtrie.h
│ │ │ ├── utext.h
│ │ │ ├── utf.h
│ │ │ ├── utf16.h
│ │ │ ├── utf32.h
│ │ │ ├── utf8.h
│ │ │ ├── utf_old.h
│ │ │ ├── utmscale.h
│ │ │ ├── utrace.h
│ │ │ ├── utrans.h
│ │ │ ├── utypes.h
│ │ │ ├── uvernum.h
│ │ │ ├── uversion.h
│ │ │ └── vtzone.h
│ │ ├── repair/
│ │ │ ├── SQLiteRepairKit.h
│ │ │ ├── sqliterk.c
│ │ │ ├── sqliterk.h
│ │ │ ├── sqliterk_api.c
│ │ │ ├── sqliterk_btree.c
│ │ │ ├── sqliterk_output.cpp
│ │ │ ├── sqliterk_pager.c
│ │ │ ├── sqliterk_pager.h
│ │ │ └── sqliterk_values.c
│ │ └── vfslog/
│ │ ├── vfslog.c
│ │ └── vfslog.h
│ ├── build.gradle
│ ├── gradle/
│ │ ├── WeChatArmeabiCompat.gradle
│ │ ├── WeChatNativeDepend.gradle
│ │ ├── WeChatPublish.gradle
│ │ ├── doclava-1.0.6.jar
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── jni/
│ │ ├── ChunkedCursorWindow.cpp
│ │ ├── ChunkedCursorWindow.h
│ │ ├── CursorWindow.cpp
│ │ ├── CursorWindow.h
│ │ ├── Errors.h
│ │ ├── JNIHelp.cpp
│ │ ├── JNIHelp.h
│ │ ├── Logger.c
│ │ ├── Logger.h
│ │ ├── ModuleLoader.c
│ │ ├── ModuleLoader.h
│ │ ├── Mutex.h
│ │ ├── SQLiteCommon.cpp
│ │ ├── SQLiteCommon.h
│ │ ├── Unicode.cpp
│ │ ├── Unicode.h
│ │ ├── com_tencent_wcdb_CursorWindow.cpp
│ │ ├── com_tencent_wcdb_FileUtils.cpp
│ │ ├── com_tencent_wcdb_database_ChunkedCursorWindow.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteConnection.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteDebug.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteDirectQuery.cpp
│ │ ├── com_tencent_wcdb_database_SQLiteGlobal.cpp
│ │ ├── com_tencent_wcdb_extension_fts_MMFtsTokenizer.cpp
│ │ ├── com_tencent_wcdb_repair_Backup.cpp
│ │ ├── com_tencent_wcdb_repair_DBDumpUtil.cpp
│ │ ├── com_tencent_wcdb_repair_RepairKit.cpp
│ │ └── com_tencent_wcdb_support_Log.cpp
│ ├── room/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── tencent/
│ │ └── wcdb/
│ │ └── room/
│ │ └── db/
│ │ ├── WCDBDatabase.java
│ │ ├── WCDBOpenHelper.java
│ │ ├── WCDBOpenHelperFactory.java
│ │ ├── WCDBProgram.java
│ │ └── WCDBStatement.java
│ ├── samples/
│ │ ├── benchmark/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ ├── src/
│ │ │ │ ├── androidTest/
│ │ │ │ │ └── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── benchmark/
│ │ │ │ │ ├── concurrent/
│ │ │ │ │ │ ├── ConcurrentTest.java
│ │ │ │ │ │ ├── FrameworkConcurrentTest.java
│ │ │ │ │ │ ├── FrameworkWalConcurrentTest.java
│ │ │ │ │ │ ├── SQLCipherConcurrentTest.java
│ │ │ │ │ │ ├── SQLCipherEncryptedConcurrentTest.java
│ │ │ │ │ │ ├── WCDBConcurrentTest.java
│ │ │ │ │ │ ├── WCDBEncryptedConcurrentTest.java
│ │ │ │ │ │ ├── WCDBWalConcurrentTest.java
│ │ │ │ │ │ └── WCDBWalEncryptedConcurrentTest.java
│ │ │ │ │ └── single/
│ │ │ │ │ ├── FrameworkSingleThreadedTest.java
│ │ │ │ │ ├── FrameworkWalSingleThreadedTest.java
│ │ │ │ │ ├── SQLCipherEncryptedSingleThreadedTest.java
│ │ │ │ │ ├── SQLCipherSingleThreadedTest.java
│ │ │ │ │ ├── SingleThreadedTest.java
│ │ │ │ │ ├── WCDBEncryptedSingleThreadedTest.java
│ │ │ │ │ ├── WCDBSingleThreadedTest.java
│ │ │ │ │ ├── WCDBWalAsyncCpSingleThreadedTest.java
│ │ │ │ │ ├── WCDBWalEncryptedAsyncCpSingleThreadedTest.java
│ │ │ │ │ ├── WCDBWalEncryptedSingleThreadedTest.java
│ │ │ │ │ └── WCDBWalSingleThreadedTest.java
│ │ │ │ └── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── res/
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── summary.awk
│ │ ├── sample-encryptdb/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdb/
│ │ │ │ └── sample/
│ │ │ │ └── encryptdb/
│ │ │ │ └── ExampleInstrumentedTest.java
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── sample/
│ │ │ │ │ └── encryptdb/
│ │ │ │ │ ├── EncryptedDBHelper.java
│ │ │ │ │ ├── MainActivity.java
│ │ │ │ │ └── PlainTextDBHelper.java
│ │ │ │ └── res/
│ │ │ │ ├── layout/
│ │ │ │ │ ├── activity_main.xml
│ │ │ │ │ └── main_listitem.xml
│ │ │ │ ├── menu/
│ │ │ │ │ └── menu_main.xml
│ │ │ │ └── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ └── sample/
│ │ │ └── encryptdb/
│ │ │ └── ExampleUnitTest.java
│ │ ├── sample-persistence/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── wcdb/
│ │ │ │ └── sample/
│ │ │ │ └── persistence/
│ │ │ │ └── ExampleInstrumentedTest.java
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── sample/
│ │ │ │ │ └── persistence/
│ │ │ │ │ ├── MainActivity.java
│ │ │ │ │ └── entity/
│ │ │ │ │ ├── AppDatabase.java
│ │ │ │ │ ├── User.java
│ │ │ │ │ └── UserDao.java
│ │ │ │ └── res/
│ │ │ │ ├── layout/
│ │ │ │ │ └── activity_main.xml
│ │ │ │ └── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── wcdb/
│ │ │ └── sample/
│ │ │ └── persistence/
│ │ │ └── ExampleUnitTest.java
│ │ ├── sample-repairdb/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdb/
│ │ │ │ └── sample/
│ │ │ │ └── repairdb/
│ │ │ │ └── ExampleInstrumentedTest.java
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ └── sample/
│ │ │ │ │ └── repairdb/
│ │ │ │ │ ├── DBHelper.java
│ │ │ │ │ └── MainActivity.java
│ │ │ │ └── res/
│ │ │ │ ├── layout/
│ │ │ │ │ ├── activity_main.xml
│ │ │ │ │ └── main_listitem.xml
│ │ │ │ └── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ └── sample/
│ │ │ └── repairdb/
│ │ │ └── ExampleUnitTest.java
│ │ └── sample-room-with-a-view/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── android/
│ │ │ └── roomwordssample/
│ │ │ ├── LiveDataTestUtil.java
│ │ │ └── WordDaoTest.java
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── android/
│ │ │ └── roomwordssample/
│ │ │ ├── MainActivity.java
│ │ │ ├── NewWordActivity.java
│ │ │ ├── Word.java
│ │ │ ├── WordDao.java
│ │ │ ├── WordListAdapter.java
│ │ │ ├── WordRepository.java
│ │ │ ├── WordRoomDatabase.java
│ │ │ └── WordViewModel.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ ├── ic_add_black_24dp.xml
│ │ │ └── ic_launcher_background.xml
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_new_word.xml
│ │ │ ├── content_main.xml
│ │ │ └── recyclerview_item.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── settings.gradle
│ ├── sqlcipher/
│ │ ├── sqlcipher.h
│ │ ├── sqlite3.c
│ │ ├── sqlite3.h
│ │ ├── sqlite3ext.h
│ │ └── sqlite3session.h
│ └── wcdb/
│ ├── .gitignore
│ ├── AndroidManifest.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ └── com/
│ └── tencent/
│ └── wcdb/
│ ├── AbstractCursor.java
│ ├── AbstractWindowedCursor.java
│ ├── BulkCursorDescriptor.java
│ ├── BulkCursorNative.java
│ ├── BulkCursorToCursorAdaptor.java
│ ├── CrossProcessCursor.java
│ ├── CrossProcessCursorWrapper.java
│ ├── Cursor.java
│ ├── CursorIndexOutOfBoundsException.java
│ ├── CursorJoiner.java
│ ├── CursorToBulkCursorAdaptor.java
│ ├── CursorWindow.aidl
│ ├── CursorWindow.java
│ ├── CursorWindowAllocationException.java
│ ├── CursorWrapper.java
│ ├── DatabaseErrorHandler.java
│ ├── DatabaseUtils.java
│ ├── DefaultDatabaseErrorHandler.java
│ ├── FileUtils.java
│ ├── IBulkCursor.java
│ ├── IContentObserver.aidl
│ ├── MatrixCursor.java
│ ├── MergeCursor.java
│ ├── Observable.java
│ ├── SQLException.java
│ ├── StaleDataException.java
│ ├── database/
│ │ ├── ChunkedCursorWindow.java
│ │ ├── DatabaseObjectNotClosedException.java
│ │ ├── SQLiteAbortException.java
│ │ ├── SQLiteAccessPermException.java
│ │ ├── SQLiteAsyncCheckpointer.java
│ │ ├── SQLiteAsyncCursor.java
│ │ ├── SQLiteAsyncQuery.java
│ │ ├── SQLiteBindOrColumnIndexOutOfRangeException.java
│ │ ├── SQLiteBlobTooBigException.java
│ │ ├── SQLiteCantOpenDatabaseException.java
│ │ ├── SQLiteChangeListener.java
│ │ ├── SQLiteCheckpointListener.java
│ │ ├── SQLiteCipherSpec.java
│ │ ├── SQLiteClosable.java
│ │ ├── SQLiteConnection.java
│ │ ├── SQLiteConnectionPool.java
│ │ ├── SQLiteConstraintException.java
│ │ ├── SQLiteCursor.java
│ │ ├── SQLiteCursorDriver.java
│ │ ├── SQLiteCustomFunction.java
│ │ ├── SQLiteDatabase.java
│ │ ├── SQLiteDatabaseConfiguration.java
│ │ ├── SQLiteDatabaseCorruptException.java
│ │ ├── SQLiteDatabaseLockedException.java
│ │ ├── SQLiteDatatypeMismatchException.java
│ │ ├── SQLiteDebug.java
│ │ ├── SQLiteDirectCursor.java
│ │ ├── SQLiteDirectCursorDriver.java
│ │ ├── SQLiteDirectQuery.java
│ │ ├── SQLiteDiskIOException.java
│ │ ├── SQLiteDoneException.java
│ │ ├── SQLiteException.java
│ │ ├── SQLiteFullException.java
│ │ ├── SQLiteGlobal.java
│ │ ├── SQLiteMisuseException.java
│ │ ├── SQLiteOpenHelper.java
│ │ ├── SQLiteOutOfMemoryException.java
│ │ ├── SQLiteProgram.java
│ │ ├── SQLiteQuery.java
│ │ ├── SQLiteQueryBuilder.java
│ │ ├── SQLiteReadOnlyDatabaseException.java
│ │ ├── SQLiteSession.java
│ │ ├── SQLiteStatement.java
│ │ ├── SQLiteStatementInfo.java
│ │ ├── SQLiteTableLockedException.java
│ │ └── SQLiteTrace.java
│ ├── extension/
│ │ ├── SQLiteExtension.java
│ │ └── fts/
│ │ └── MMFtsTokenizer.java
│ ├── repair/
│ │ ├── BackupKit.java
│ │ ├── DBDumpUtil.java
│ │ ├── RecoverKit.java
│ │ └── RepairKit.java
│ └── support/
│ ├── CancellationSignal.java
│ ├── Context.java
│ ├── ICancellationSignal.aidl
│ ├── Log.java
│ ├── LogPrinter.java
│ ├── LruCache.java
│ ├── OperationCanceledException.java
│ └── PrefixPrinter.java
├── src/
│ ├── CMakeLists.txt
│ ├── WCDB.h
│ ├── WCDB.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── xcshareddata/
│ │ ├── IDETemplateMacros.plist
│ │ ├── xcbaselines/
│ │ │ └── 23FC43C521B6631200FA1A0F.xcbaseline/
│ │ │ ├── 977CB5EE-2755-4C27-9E15-11B0C28E0E28.plist
│ │ │ ├── C3BF6D2F-DC2A-49AB-B150-DE139BD363B3.plist
│ │ │ ├── F4C9EB05-986B-414D-A7A7-E320B90A0C7D.plist
│ │ │ └── Info.plist
│ │ └── xcschemes/
│ │ ├── BenchmarkTest.xcscheme
│ │ ├── CppTests.xcscheme
│ │ ├── Host.xcscheme
│ │ ├── ObjcTests.xcscheme
│ │ ├── SwiftBridgeObjcTest.xcscheme
│ │ ├── SwiftTests.xcscheme
│ │ ├── WCDB.xcscheme
│ │ ├── WCDBCpp.xcscheme
│ │ ├── WCDBObjc.xcscheme
│ │ └── WCDBSwift.xcscheme
│ ├── bridge/
│ │ ├── WCDBBridging.h
│ │ ├── base/
│ │ │ ├── ContainerBridge.cpp
│ │ │ ├── ContainerBridge.h
│ │ │ ├── ErrorBridge.cpp
│ │ │ ├── ErrorBridge.h
│ │ │ ├── ObjectBridge.cpp
│ │ │ ├── ObjectBridge.h
│ │ │ └── ObjectBridge.hpp
│ │ ├── cppbridge/
│ │ │ ├── BindingBridge.cpp
│ │ │ ├── BindingBridge.h
│ │ │ ├── CoreBridge.cpp
│ │ │ ├── CoreBridge.h
│ │ │ ├── DatabaseBridge.cpp
│ │ │ ├── DatabaseBridge.h
│ │ │ ├── FTSBridge.cpp
│ │ │ ├── FTSBridge.h
│ │ │ ├── HandleBridge.cpp
│ │ │ ├── HandleBridge.h
│ │ │ ├── HandleStatementBridge.cpp
│ │ │ └── HandleStatementBridge.h
│ │ ├── module.modulemap
│ │ ├── objcbridge/
│ │ │ ├── WCTAPIBridge.h
│ │ │ ├── WCTAPIBridge.mm
│ │ │ └── WCTBridgeMacro.h
│ │ ├── tests/
│ │ │ ├── common/
│ │ │ │ ├── Assert.swift
│ │ │ │ ├── BaseTestCase.swift
│ │ │ │ ├── Convenience.swift
│ │ │ │ └── SwiftBridgeObjcTest-Bridging-Header.h
│ │ │ └── crud/
│ │ │ ├── AdvanceCRUDTests.swift
│ │ │ ├── AutoAddColumnObject.h
│ │ │ ├── AutoAddColumnObject.mm
│ │ │ ├── AutoAddColumnTests.swift
│ │ │ ├── CRUDObject.h
│ │ │ ├── CRUDObject.mm
│ │ │ ├── CRUDObject.swift
│ │ │ ├── CRUDTestCase.swift
│ │ │ ├── DatabaseTestCase.swift
│ │ │ ├── DeleteInterfaceTests.swift
│ │ │ ├── DeleteTests.swift
│ │ │ ├── InsertInterfaceTests.swift
│ │ │ ├── InsertTests.swift
│ │ │ ├── MultiSelectTests.swift
│ │ │ ├── RowSelectTests.swift
│ │ │ ├── SelectInterfaceTests.swift
│ │ │ ├── SelectTests.swift
│ │ │ ├── UpdateInterfaceTests.swift
│ │ │ └── UpdateTests.swift
│ │ └── winqbridge/
│ │ ├── WinqBridge.cpp
│ │ ├── WinqBridge.h
│ │ ├── WinqBridge.hpp
│ │ ├── identifier/
│ │ │ ├── BindParameterBridge.cpp
│ │ │ ├── BindParameterBridge.h
│ │ │ ├── ColumnBridge.cpp
│ │ │ ├── ColumnBridge.h
│ │ │ ├── ColumnConstraintBridge.cpp
│ │ │ ├── ColumnConstraintBridge.h
│ │ │ ├── ColumnDefBridge.cpp
│ │ │ ├── ColumnDefBridge.h
│ │ │ ├── CommonTableExpressionBridge.cpp
│ │ │ ├── CommonTableExpressionBridge.h
│ │ │ ├── ExpressionBridge.cpp
│ │ │ ├── ExpressionBridge.h
│ │ │ ├── ExpressionOperatableBridge.cpp
│ │ │ ├── ExpressionOperatableBridge.h
│ │ │ ├── ForeignKeyBridge.cpp
│ │ │ ├── ForeignKeyBridge.h
│ │ │ ├── FrameSpecBridge.cpp
│ │ │ ├── FrameSpecBridge.h
│ │ │ ├── IndexedColumnBridge.cpp
│ │ │ ├── IndexedColumnBridge.h
│ │ │ ├── JoinBridge.cpp
│ │ │ ├── JoinBridge.h
│ │ │ ├── LiteralValueBridge.cpp
│ │ │ ├── LiteralValueBridge.h
│ │ │ ├── OrderingTermBridge.cpp
│ │ │ ├── OrderingTermBridge.h
│ │ │ ├── PragmaBridge.cpp
│ │ │ ├── PragmaBridge.h
│ │ │ ├── QualifiedTableBridge.cpp
│ │ │ ├── QualifiedTableBridge.h
│ │ │ ├── RaiseFunctionBridge.cpp
│ │ │ ├── RaiseFunctionBridge.h
│ │ │ ├── ResultColumnBridge.cpp
│ │ │ ├── ResultColumnBridge.h
│ │ │ ├── SchemaBridge.cpp
│ │ │ ├── SchemaBridge.h
│ │ │ ├── TableConstraintBridge.cpp
│ │ │ ├── TableConstraintBridge.h
│ │ │ ├── TableOrSubqueryBridge.cpp
│ │ │ ├── TableOrSubqueryBridge.h
│ │ │ ├── UpsertBridge.cpp
│ │ │ ├── UpsertBridge.h
│ │ │ ├── WindowDefBridge.cpp
│ │ │ └── WindowDefBridge.h
│ │ └── statement/
│ │ ├── StatementAlterTableBridge.cpp
│ │ ├── StatementAlterTableBridge.h
│ │ ├── StatementAnalyzeBridge.cpp
│ │ ├── StatementAnalyzeBridge.h
│ │ ├── StatementAttachBridge.cpp
│ │ ├── StatementAttachBridge.h
│ │ ├── StatementBeginBridge.cpp
│ │ ├── StatementBeginBridge.h
│ │ ├── StatementCommitBridge.cpp
│ │ ├── StatementCommitBridge.h
│ │ ├── StatementCreateIndexBridge.cpp
│ │ ├── StatementCreateIndexBridge.h
│ │ ├── StatementCreateTableBridge.cpp
│ │ ├── StatementCreateTableBridge.h
│ │ ├── StatementCreateTriggerBridge.cpp
│ │ ├── StatementCreateTriggerBridge.h
│ │ ├── StatementCreateViewBridge.cpp
│ │ ├── StatementCreateViewBridge.h
│ │ ├── StatementCreateVirtualTableBridge.cpp
│ │ ├── StatementCreateVirtualTableBridge.h
│ │ ├── StatementDeleteBridge.cpp
│ │ ├── StatementDeleteBridge.h
│ │ ├── StatementDetachBridge.cpp
│ │ ├── StatementDetachBridge.h
│ │ ├── StatementDropIndexBridge.cpp
│ │ ├── StatementDropIndexBridge.h
│ │ ├── StatementDropTableBridge.cpp
│ │ ├── StatementDropTableBridge.h
│ │ ├── StatementDropTriggerBridge.cpp
│ │ ├── StatementDropTriggerBridge.h
│ │ ├── StatementDropViewBridge.cpp
│ │ ├── StatementDropViewBridge.h
│ │ ├── StatementExplainBridge.cpp
│ │ ├── StatementExplainBridge.h
│ │ ├── StatementInsertBridge.cpp
│ │ ├── StatementInsertBridge.h
│ │ ├── StatementPragmaBridge.cpp
│ │ ├── StatementPragmaBridge.h
│ │ ├── StatementReindexBridge.cpp
│ │ ├── StatementReindexBridge.h
│ │ ├── StatementReleaseBridge.cpp
│ │ ├── StatementReleaseBridge.h
│ │ ├── StatementRollbackBridge.cpp
│ │ ├── StatementRollbackBridge.h
│ │ ├── StatementSavepointBridge.cpp
│ │ ├── StatementSavepointBridge.h
│ │ ├── StatementSelectBridge.cpp
│ │ ├── StatementSelectBridge.h
│ │ ├── StatementUpdateBridge.cpp
│ │ ├── StatementUpdateBridge.h
│ │ ├── StatementVacuumBridge.cpp
│ │ └── StatementVacuumBridge.h
│ ├── common/
│ │ ├── base/
│ │ │ ├── Assertion.hpp
│ │ │ ├── ClassDecorator.hpp
│ │ │ ├── Console.cpp
│ │ │ ├── Console.hpp
│ │ │ ├── DBOperationNotifier.cpp
│ │ │ ├── DBOperationNotifier.hpp
│ │ │ ├── Data.cpp
│ │ │ ├── Data.hpp
│ │ │ ├── ErrorProne.cpp
│ │ │ ├── ErrorProne.hpp
│ │ │ ├── FileHandle.cpp
│ │ │ ├── FileHandle.hpp
│ │ │ ├── FileManager.cpp
│ │ │ ├── FileManager.hpp
│ │ │ ├── FunctionContainer.cpp
│ │ │ ├── FunctionContainer.hpp
│ │ │ ├── HighWater.cpp
│ │ │ ├── HighWater.hpp
│ │ │ ├── LRUCache.hpp
│ │ │ ├── Lock.cpp
│ │ │ ├── Lock.hpp
│ │ │ ├── MappedData.cpp
│ │ │ ├── MappedData.hpp
│ │ │ ├── MemberPointer.hpp
│ │ │ ├── Notifier.cpp
│ │ │ ├── Notifier.hpp
│ │ │ ├── Path.cpp
│ │ │ ├── Path.hpp
│ │ │ ├── Progress.cpp
│ │ │ ├── Progress.hpp
│ │ │ ├── Range.cpp
│ │ │ ├── Range.hpp
│ │ │ ├── Recyclable.cpp
│ │ │ ├── Recyclable.hpp
│ │ │ ├── SQLite.h
│ │ │ ├── SQLiteDeclaration.h
│ │ │ ├── Serialization.cpp
│ │ │ ├── Serialization.hpp
│ │ │ ├── SharedThreadedErrorProne.cpp
│ │ │ ├── SharedThreadedErrorProne.hpp
│ │ │ ├── StringView.cpp
│ │ │ ├── StringView.hpp
│ │ │ ├── Thread.cpp
│ │ │ ├── Thread.hpp
│ │ │ ├── ThreadLocal.hpp
│ │ │ ├── ThreadedErrors.cpp
│ │ │ ├── ThreadedErrors.hpp
│ │ │ ├── Time.cpp
│ │ │ ├── Time.hpp
│ │ │ ├── UnsafeData.cpp
│ │ │ ├── UnsafeData.hpp
│ │ │ ├── WCDBError.cpp
│ │ │ ├── WCDBError.hpp
│ │ │ ├── WCDBOptional.cpp
│ │ │ └── WCDBOptional.hpp
│ │ ├── core/
│ │ │ ├── CommonCore.cpp
│ │ │ ├── CommonCore.h
│ │ │ ├── CommonCore.hpp
│ │ │ ├── CoreConst.cpp
│ │ │ ├── CoreConst.h
│ │ │ ├── DatabasePool.cpp
│ │ │ ├── DatabasePool.hpp
│ │ │ ├── HandleCounter.cpp
│ │ │ ├── HandleCounter.hpp
│ │ │ ├── HandlePool.cpp
│ │ │ ├── HandlePool.hpp
│ │ │ ├── InnerDatabase.cpp
│ │ │ ├── InnerDatabase.hpp
│ │ │ ├── InnerHandle.cpp
│ │ │ ├── InnerHandle.hpp
│ │ │ ├── RecyclableHandle.cpp
│ │ │ ├── RecyclableHandle.hpp
│ │ │ ├── Tag.cpp
│ │ │ ├── Tag.hpp
│ │ │ ├── assemble/
│ │ │ │ ├── AssembleHandleOperator.cpp
│ │ │ │ └── AssembleHandleOperator.hpp
│ │ │ ├── cipher/
│ │ │ │ ├── CipherHandle.cpp
│ │ │ │ └── CipherHandle.hpp
│ │ │ ├── compression/
│ │ │ │ ├── AutoCompressConfig.cpp
│ │ │ │ ├── AutoCompressConfig.hpp
│ │ │ │ ├── CompressHandleOperator.cpp
│ │ │ │ ├── CompressHandleOperator.hpp
│ │ │ │ ├── CompressingHandleDecorator.cpp
│ │ │ │ ├── CompressingHandleDecorator.hpp
│ │ │ │ ├── CompressingStatementDecorator.cpp
│ │ │ │ ├── CompressingStatementDecorator.hpp
│ │ │ │ ├── Compression.cpp
│ │ │ │ ├── Compression.hpp
│ │ │ │ ├── CompressionCenter.cpp
│ │ │ │ ├── CompressionCenter.hpp
│ │ │ │ ├── CompressionConst.cpp
│ │ │ │ ├── CompressionConst.hpp
│ │ │ │ ├── CompressionInfo.cpp
│ │ │ │ ├── CompressionInfo.hpp
│ │ │ │ ├── CompressionRecord.cpp
│ │ │ │ ├── CompressionRecord.hpp
│ │ │ │ ├── DecompressFunction.cpp
│ │ │ │ ├── DecompressFunction.hpp
│ │ │ │ ├── ZSTDContext.cpp
│ │ │ │ ├── ZSTDContext.hpp
│ │ │ │ ├── ZSTDDict.cpp
│ │ │ │ └── ZSTDDict.hpp
│ │ │ ├── config/
│ │ │ │ ├── AutoBackupConfig.cpp
│ │ │ │ ├── AutoBackupConfig.hpp
│ │ │ │ ├── AutoCheckpointConfig.cpp
│ │ │ │ ├── AutoCheckpointConfig.hpp
│ │ │ │ ├── AutoVacuumConfig.cpp
│ │ │ │ ├── AutoVacuumConfig.hpp
│ │ │ │ ├── BasicConfig.cpp
│ │ │ │ ├── BasicConfig.hpp
│ │ │ │ ├── BusyRetryConfig.cpp
│ │ │ │ ├── BusyRetryConfig.hpp
│ │ │ │ ├── CipherConfig.cpp
│ │ │ │ ├── CipherConfig.hpp
│ │ │ │ ├── Config.cpp
│ │ │ │ ├── Config.hpp
│ │ │ │ ├── Configs.cpp
│ │ │ │ ├── Configs.hpp
│ │ │ │ ├── CustomConfig.cpp
│ │ │ │ ├── CustomConfig.hpp
│ │ │ │ ├── PerformanceTraceConfig.cpp
│ │ │ │ ├── PerformanceTraceConfig.hpp
│ │ │ │ ├── SQLTraceConfig.cpp
│ │ │ │ └── SQLTraceConfig.hpp
│ │ │ ├── fts/
│ │ │ │ ├── AutoMergeFTSIndexConfig.cpp
│ │ │ │ ├── AutoMergeFTSIndexConfig.hpp
│ │ │ │ ├── FTSConst.h
│ │ │ │ ├── FTSError.cpp
│ │ │ │ ├── FTSError.hpp
│ │ │ │ ├── MergeFTSIndexLogic.cpp
│ │ │ │ ├── MergeFTSIndexLogic.hpp
│ │ │ │ ├── auxfunction/
│ │ │ │ │ ├── AuxiliaryFunctionConfig.cpp
│ │ │ │ │ ├── AuxiliaryFunctionConfig.hpp
│ │ │ │ │ ├── AuxiliaryFunctionModule.cpp
│ │ │ │ │ ├── AuxiliaryFunctionModule.hpp
│ │ │ │ │ ├── FTS5AuxiliaryFunctionTemplate.hpp
│ │ │ │ │ ├── SubstringMatchInfo.cpp
│ │ │ │ │ └── SubstringMatchInfo.hpp
│ │ │ │ └── tokenizer/
│ │ │ │ ├── AndroidUnicodeDefine.h
│ │ │ │ ├── AndroidUnicodeFunctions.h
│ │ │ │ ├── BaseTokenizerUtil.cpp
│ │ │ │ ├── BaseTokenizerUtil.hpp
│ │ │ │ ├── MMICUTokenizer.cpp
│ │ │ │ ├── MMICUTokenizer.hpp
│ │ │ │ ├── OneOrBinaryTokenizer.cpp
│ │ │ │ ├── OneOrBinaryTokenizer.hpp
│ │ │ │ ├── PinyinTokenizer.cpp
│ │ │ │ ├── PinyinTokenizer.hpp
│ │ │ │ ├── PorterStemming.c
│ │ │ │ ├── SQLiteFTS3Tokenizer.h
│ │ │ │ ├── TokenizerConfig.cpp
│ │ │ │ ├── TokenizerConfig.hpp
│ │ │ │ ├── TokenizerModule.cpp
│ │ │ │ ├── TokenizerModule.hpp
│ │ │ │ ├── TokenizerModuleTemplate.hpp
│ │ │ │ ├── TokenizerModules.cpp
│ │ │ │ └── TokenizerModules.hpp
│ │ │ ├── function/
│ │ │ │ ├── FunctionModules.hpp
│ │ │ │ └── scalar/
│ │ │ │ ├── ScalarFunctionConfig.cpp
│ │ │ │ ├── ScalarFunctionConfig.hpp
│ │ │ │ ├── ScalarFunctionModule.cpp
│ │ │ │ ├── ScalarFunctionModule.hpp
│ │ │ │ └── ScalarFunctionTemplate.hpp
│ │ │ ├── integrity/
│ │ │ │ ├── IntegerityHandleOperator.cpp
│ │ │ │ └── IntegerityHandleOperator.hpp
│ │ │ ├── migration/
│ │ │ │ ├── AutoMigrateConfig.cpp
│ │ │ │ ├── AutoMigrateConfig.hpp
│ │ │ │ ├── MigrateHandleOperator.cpp
│ │ │ │ ├── MigrateHandleOperator.hpp
│ │ │ │ ├── MigratingHandleDecorator.cpp
│ │ │ │ ├── MigratingHandleDecorator.hpp
│ │ │ │ ├── MigratingStatementDecorator.cpp
│ │ │ │ ├── MigratingStatementDecorator.hpp
│ │ │ │ ├── Migration.cpp
│ │ │ │ ├── Migration.hpp
│ │ │ │ ├── MigrationInfo.cpp
│ │ │ │ └── MigrationInfo.hpp
│ │ │ ├── operate/
│ │ │ │ ├── OperationQueue.cpp
│ │ │ │ ├── OperationQueue.hpp
│ │ │ │ ├── OperationQueueForMemory.cpp
│ │ │ │ └── OperationQueueForMemory.hpp
│ │ │ ├── sqlite/
│ │ │ │ ├── AbstractHandle.cpp
│ │ │ │ ├── AbstractHandle.hpp
│ │ │ │ ├── ColumnMeta.cpp
│ │ │ │ ├── ColumnMeta.hpp
│ │ │ │ ├── DecorativeHandle.cpp
│ │ │ │ ├── DecorativeHandle.hpp
│ │ │ │ ├── DecorativeHandleStatement.cpp
│ │ │ │ ├── DecorativeHandleStatement.hpp
│ │ │ │ ├── Global.cpp
│ │ │ │ ├── Global.hpp
│ │ │ │ ├── HandleNotification.cpp
│ │ │ │ ├── HandleNotification.hpp
│ │ │ │ ├── HandleOperator.cpp
│ │ │ │ ├── HandleOperator.hpp
│ │ │ │ ├── HandleRelated.cpp
│ │ │ │ ├── HandleRelated.hpp
│ │ │ │ ├── HandleStatement.cpp
│ │ │ │ ├── HandleStatement.hpp
│ │ │ │ ├── TableAttribute.cpp
│ │ │ │ └── TableAttribute.hpp
│ │ │ └── vacuum/
│ │ │ ├── VacuumHandleOperator.cpp
│ │ │ └── VacuumHandleOperator.hpp
│ │ ├── platform/
│ │ │ ├── CrossPlatform.c
│ │ │ ├── CrossPlatform.h
│ │ │ ├── SysTypes.h
│ │ │ ├── WCTFileManager.cpp
│ │ │ └── WCTOperationQueue.cpp
│ │ ├── repair/
│ │ │ ├── Info.plist
│ │ │ ├── RepairKit.h
│ │ │ ├── SQLiteRepairKit.modulemap
│ │ │ ├── basic/
│ │ │ │ ├── Assemble.cpp
│ │ │ │ ├── Assemble.hpp
│ │ │ │ ├── Cipher.cpp
│ │ │ │ ├── Cipher.hpp
│ │ │ │ ├── Crawlable.cpp
│ │ │ │ ├── Crawlable.hpp
│ │ │ │ ├── EncryptedSerialization.cpp
│ │ │ │ ├── EncryptedSerialization.hpp
│ │ │ │ ├── MasterItem.cpp
│ │ │ │ ├── MasterItem.hpp
│ │ │ │ ├── Repairman.cpp
│ │ │ │ ├── Repairman.hpp
│ │ │ │ ├── Scoreable.cpp
│ │ │ │ ├── Scoreable.hpp
│ │ │ │ ├── SequenceItem.cpp
│ │ │ │ ├── SequenceItem.hpp
│ │ │ │ ├── UpgradeableErrorProne.cpp
│ │ │ │ ├── UpgradeableErrorProne.hpp
│ │ │ │ ├── Vacuum.cpp
│ │ │ │ └── Vacuum.hpp
│ │ │ ├── crawl/
│ │ │ │ ├── FullCrawler.cpp
│ │ │ │ ├── FullCrawler.hpp
│ │ │ │ ├── MasterCrawler.cpp
│ │ │ │ ├── MasterCrawler.hpp
│ │ │ │ ├── SequenceCrawler.cpp
│ │ │ │ └── SequenceCrawler.hpp
│ │ │ ├── factory/
│ │ │ │ ├── Factory.cpp
│ │ │ │ ├── Factory.hpp
│ │ │ │ ├── FactoryBackup.cpp
│ │ │ │ ├── FactoryBackup.hpp
│ │ │ │ ├── FactoryDepositor.cpp
│ │ │ │ ├── FactoryDepositor.hpp
│ │ │ │ ├── FactoryRelated.cpp
│ │ │ │ ├── FactoryRelated.hpp
│ │ │ │ ├── FactoryRenewer.cpp
│ │ │ │ ├── FactoryRenewer.hpp
│ │ │ │ ├── FactoryRetriever.cpp
│ │ │ │ ├── FactoryRetriever.hpp
│ │ │ │ ├── FactoryVacuum.cpp
│ │ │ │ └── FactoryVacuum.hpp
│ │ │ ├── mechanic/
│ │ │ │ ├── Backup.cpp
│ │ │ │ ├── Backup.hpp
│ │ │ │ ├── BackupHandleOperator.cpp
│ │ │ │ ├── BackupHandleOperator.hpp
│ │ │ │ ├── IncrementalMaterial.cpp
│ │ │ │ ├── IncrementalMaterial.hpp
│ │ │ │ ├── Material.cpp
│ │ │ │ ├── Material.hpp
│ │ │ │ ├── Mechanic.cpp
│ │ │ │ └── Mechanic.hpp
│ │ │ ├── parse/
│ │ │ │ ├── Cell.cpp
│ │ │ │ ├── Cell.hpp
│ │ │ │ ├── Frame.cpp
│ │ │ │ ├── Frame.hpp
│ │ │ │ ├── Initializeable.cpp
│ │ │ │ ├── Initializeable.hpp
│ │ │ │ ├── Page.cpp
│ │ │ │ ├── Page.hpp
│ │ │ │ ├── PageBasedFileHandle.cpp
│ │ │ │ ├── PageBasedFileHandle.hpp
│ │ │ │ ├── Pager.cpp
│ │ │ │ ├── Pager.hpp
│ │ │ │ ├── PagerRelated.cpp
│ │ │ │ ├── PagerRelated.hpp
│ │ │ │ ├── Shm.cpp
│ │ │ │ ├── Shm.hpp
│ │ │ │ ├── Wal.cpp
│ │ │ │ ├── Wal.hpp
│ │ │ │ ├── WalRelated.cpp
│ │ │ │ └── WalRelated.hpp
│ │ │ ├── sqlite/
│ │ │ │ ├── SQLiteAssembler.cpp
│ │ │ │ ├── SQLiteAssembler.hpp
│ │ │ │ ├── SQLiteBase.cpp
│ │ │ │ ├── SQLiteBase.hpp
│ │ │ │ ├── SQLiteLocker.cpp
│ │ │ │ └── SQLiteLocker.hpp
│ │ │ └── utility/
│ │ │ ├── Fraction.cpp
│ │ │ └── Fraction.hpp
│ │ ├── utility/
│ │ │ ├── AsyncQueue.cpp
│ │ │ ├── AsyncQueue.hpp
│ │ │ ├── CaseInsensitiveList.hpp
│ │ │ ├── Enum.hpp
│ │ │ ├── Exiting.cpp
│ │ │ ├── Exiting.hpp
│ │ │ ├── Macro.h
│ │ │ ├── Shadow.hpp
│ │ │ ├── TimedQueue.hpp
│ │ │ ├── UniqueList.hpp
│ │ │ └── WCDBVersion.h
│ │ └── winq/
│ │ ├── SQL.cpp
│ │ ├── SQL.hpp
│ │ ├── Statement.cpp
│ │ ├── Statement.hpp
│ │ ├── WINQ.h
│ │ ├── extension/
│ │ │ ├── AggregateFunction.cpp
│ │ │ ├── AggregateFunction.hpp
│ │ │ ├── BaseBinding.cpp
│ │ │ ├── BaseBinding.hpp
│ │ │ ├── ColumnType.cpp
│ │ │ ├── ColumnType.hpp
│ │ │ ├── Convertible.hpp
│ │ │ ├── ConvertibleImplementation.cpp
│ │ │ ├── ConvertibleImplementation.hpp
│ │ │ ├── CoreFunction.cpp
│ │ │ ├── CoreFunction.hpp
│ │ │ ├── ExpressionOperable.cpp
│ │ │ ├── ExpressionOperable.hpp
│ │ │ ├── FTSFunction.cpp
│ │ │ ├── FTSFunction.hpp
│ │ │ ├── SyntaxForwardDeclaration.h
│ │ │ ├── SyntaxList.hpp
│ │ │ ├── Value.cpp
│ │ │ ├── Value.hpp
│ │ │ └── ValueArray.hpp
│ │ ├── identifier/
│ │ │ ├── BindParameter.cpp
│ │ │ ├── BindParameter.hpp
│ │ │ ├── Column.cpp
│ │ │ ├── Column.hpp
│ │ │ ├── ColumnConstraint.cpp
│ │ │ ├── ColumnConstraint.hpp
│ │ │ ├── ColumnDef.cpp
│ │ │ ├── ColumnDef.hpp
│ │ │ ├── CommonTableExpression.cpp
│ │ │ ├── CommonTableExpression.hpp
│ │ │ ├── Expression.cpp
│ │ │ ├── Expression.hpp
│ │ │ ├── Filter.cpp
│ │ │ ├── Filter.hpp
│ │ │ ├── ForeignKey.cpp
│ │ │ ├── ForeignKey.hpp
│ │ │ ├── FrameSpec.cpp
│ │ │ ├── FrameSpec.hpp
│ │ │ ├── IndexedColumn.cpp
│ │ │ ├── IndexedColumn.hpp
│ │ │ ├── Join.cpp
│ │ │ ├── Join.hpp
│ │ │ ├── JoinConstraint.cpp
│ │ │ ├── JoinConstraint.hpp
│ │ │ ├── LiteralValue.cpp
│ │ │ ├── LiteralValue.hpp
│ │ │ ├── OrderingTerm.cpp
│ │ │ ├── OrderingTerm.hpp
│ │ │ ├── Pragma.cpp
│ │ │ ├── Pragma.hpp
│ │ │ ├── QualifiedTable.cpp
│ │ │ ├── QualifiedTable.hpp
│ │ │ ├── RaiseFunction.cpp
│ │ │ ├── RaiseFunction.hpp
│ │ │ ├── ResultColumn.cpp
│ │ │ ├── ResultColumn.hpp
│ │ │ ├── Schema.cpp
│ │ │ ├── Schema.hpp
│ │ │ ├── TableConstraint.cpp
│ │ │ ├── TableConstraint.hpp
│ │ │ ├── TableOrSubquery.cpp
│ │ │ ├── TableOrSubquery.hpp
│ │ │ ├── Upsert.cpp
│ │ │ ├── Upsert.hpp
│ │ │ ├── WindowDef.cpp
│ │ │ └── WindowDef.hpp
│ │ ├── statement/
│ │ │ ├── StatementAlterTable.cpp
│ │ │ ├── StatementAlterTable.hpp
│ │ │ ├── StatementAnalyze.cpp
│ │ │ ├── StatementAnalyze.hpp
│ │ │ ├── StatementAttach.cpp
│ │ │ ├── StatementAttach.hpp
│ │ │ ├── StatementBegin.cpp
│ │ │ ├── StatementBegin.hpp
│ │ │ ├── StatementCommit.cpp
│ │ │ ├── StatementCommit.hpp
│ │ │ ├── StatementCreateIndex.cpp
│ │ │ ├── StatementCreateIndex.hpp
│ │ │ ├── StatementCreateTable.cpp
│ │ │ ├── StatementCreateTable.hpp
│ │ │ ├── StatementCreateTrigger.cpp
│ │ │ ├── StatementCreateTrigger.hpp
│ │ │ ├── StatementCreateView.cpp
│ │ │ ├── StatementCreateView.hpp
│ │ │ ├── StatementCreateVirtualTable.cpp
│ │ │ ├── StatementCreateVirtualTable.hpp
│ │ │ ├── StatementDelete.cpp
│ │ │ ├── StatementDelete.hpp
│ │ │ ├── StatementDetach.cpp
│ │ │ ├── StatementDetach.hpp
│ │ │ ├── StatementDropIndex.cpp
│ │ │ ├── StatementDropIndex.hpp
│ │ │ ├── StatementDropTable.cpp
│ │ │ ├── StatementDropTable.hpp
│ │ │ ├── StatementDropTrigger.cpp
│ │ │ ├── StatementDropTrigger.hpp
│ │ │ ├── StatementDropView.cpp
│ │ │ ├── StatementDropView.hpp
│ │ │ ├── StatementExplain.cpp
│ │ │ ├── StatementExplain.hpp
│ │ │ ├── StatementInsert.cpp
│ │ │ ├── StatementInsert.hpp
│ │ │ ├── StatementPragma.cpp
│ │ │ ├── StatementPragma.hpp
│ │ │ ├── StatementReindex.cpp
│ │ │ ├── StatementReindex.hpp
│ │ │ ├── StatementRelease.cpp
│ │ │ ├── StatementRelease.hpp
│ │ │ ├── StatementRollback.cpp
│ │ │ ├── StatementRollback.hpp
│ │ │ ├── StatementSavepoint.cpp
│ │ │ ├── StatementSavepoint.hpp
│ │ │ ├── StatementSelect.cpp
│ │ │ ├── StatementSelect.hpp
│ │ │ ├── StatementUpdate.cpp
│ │ │ ├── StatementUpdate.hpp
│ │ │ ├── StatementVacuum.cpp
│ │ │ └── StatementVacuum.hpp
│ │ └── syntax/
│ │ ├── Syntax.h
│ │ ├── SyntaxAssertion.hpp
│ │ ├── SyntaxEnum.hpp
│ │ ├── const/
│ │ │ ├── SyntaxCommonConst.cpp
│ │ │ └── SyntaxCommonConst.hpp
│ │ ├── identifier/
│ │ │ ├── SyntaxBindParameter.cpp
│ │ │ ├── SyntaxBindParameter.hpp
│ │ │ ├── SyntaxColumn.cpp
│ │ │ ├── SyntaxColumn.hpp
│ │ │ ├── SyntaxColumnConstraint.cpp
│ │ │ ├── SyntaxColumnConstraint.hpp
│ │ │ ├── SyntaxColumnDef.cpp
│ │ │ ├── SyntaxColumnDef.hpp
│ │ │ ├── SyntaxCommonTableExpression.cpp
│ │ │ ├── SyntaxCommonTableExpression.hpp
│ │ │ ├── SyntaxExpression.cpp
│ │ │ ├── SyntaxExpression.hpp
│ │ │ ├── SyntaxFilter.cpp
│ │ │ ├── SyntaxFilter.hpp
│ │ │ ├── SyntaxForeignKeyClause.cpp
│ │ │ ├── SyntaxForeignKeyClause.hpp
│ │ │ ├── SyntaxFrameSpec.cpp
│ │ │ ├── SyntaxFrameSpec.hpp
│ │ │ ├── SyntaxIdentifier.cpp
│ │ │ ├── SyntaxIdentifier.hpp
│ │ │ ├── SyntaxIndexedColumn.cpp
│ │ │ ├── SyntaxIndexedColumn.hpp
│ │ │ ├── SyntaxJoinClause.cpp
│ │ │ ├── SyntaxJoinClause.hpp
│ │ │ ├── SyntaxJoinConstraint.cpp
│ │ │ ├── SyntaxJoinConstraint.hpp
│ │ │ ├── SyntaxLiteralValue.cpp
│ │ │ ├── SyntaxLiteralValue.hpp
│ │ │ ├── SyntaxOrderingTerm.cpp
│ │ │ ├── SyntaxOrderingTerm.hpp
│ │ │ ├── SyntaxPragma.cpp
│ │ │ ├── SyntaxPragma.hpp
│ │ │ ├── SyntaxQualifiedTableName.cpp
│ │ │ ├── SyntaxQualifiedTableName.hpp
│ │ │ ├── SyntaxRaiseFunction.cpp
│ │ │ ├── SyntaxRaiseFunction.hpp
│ │ │ ├── SyntaxResultColumn.cpp
│ │ │ ├── SyntaxResultColumn.hpp
│ │ │ ├── SyntaxSchema.cpp
│ │ │ ├── SyntaxSchema.hpp
│ │ │ ├── SyntaxSelectCore.cpp
│ │ │ ├── SyntaxSelectCore.hpp
│ │ │ ├── SyntaxTableConstraint.cpp
│ │ │ ├── SyntaxTableConstraint.hpp
│ │ │ ├── SyntaxTableOrSubquery.cpp
│ │ │ ├── SyntaxTableOrSubquery.hpp
│ │ │ ├── SyntaxUpsertClause.cpp
│ │ │ ├── SyntaxUpsertClause.hpp
│ │ │ ├── SyntaxWindowDef.cpp
│ │ │ └── SyntaxWindowDef.hpp
│ │ └── stmt/
│ │ ├── SyntaxAlterTableSTMT.cpp
│ │ ├── SyntaxAlterTableSTMT.hpp
│ │ ├── SyntaxAnalyzeSTMT.cpp
│ │ ├── SyntaxAnalyzeSTMT.hpp
│ │ ├── SyntaxAttachSTMT.cpp
│ │ ├── SyntaxAttachSTMT.hpp
│ │ ├── SyntaxBeginSTMT.cpp
│ │ ├── SyntaxBeginSTMT.hpp
│ │ ├── SyntaxCommitSTMT.cpp
│ │ ├── SyntaxCommitSTMT.hpp
│ │ ├── SyntaxCreateIndexSTMT.cpp
│ │ ├── SyntaxCreateIndexSTMT.hpp
│ │ ├── SyntaxCreateTableSTMT.cpp
│ │ ├── SyntaxCreateTableSTMT.hpp
│ │ ├── SyntaxCreateTriggerSTMT.cpp
│ │ ├── SyntaxCreateTriggerSTMT.hpp
│ │ ├── SyntaxCreateViewSTMT.cpp
│ │ ├── SyntaxCreateViewSTMT.hpp
│ │ ├── SyntaxCreateVirtualTableSTMT.cpp
│ │ ├── SyntaxCreateVirtualTableSTMT.hpp
│ │ ├── SyntaxDeleteSTMT.cpp
│ │ ├── SyntaxDeleteSTMT.hpp
│ │ ├── SyntaxDetachSTMT.cpp
│ │ ├── SyntaxDetachSTMT.hpp
│ │ ├── SyntaxDropIndexSTMT.cpp
│ │ ├── SyntaxDropIndexSTMT.hpp
│ │ ├── SyntaxDropTableSTMT.cpp
│ │ ├── SyntaxDropTableSTMT.hpp
│ │ ├── SyntaxDropTriggerSTMT.cpp
│ │ ├── SyntaxDropTriggerSTMT.hpp
│ │ ├── SyntaxDropViewSTMT.cpp
│ │ ├── SyntaxDropViewSTMT.hpp
│ │ ├── SyntaxExplainSTMT.cpp
│ │ ├── SyntaxExplainSTMT.hpp
│ │ ├── SyntaxInsertSTMT.cpp
│ │ ├── SyntaxInsertSTMT.hpp
│ │ ├── SyntaxPragmaSTMT.cpp
│ │ ├── SyntaxPragmaSTMT.hpp
│ │ ├── SyntaxReindexSTMT.cpp
│ │ ├── SyntaxReindexSTMT.hpp
│ │ ├── SyntaxReleaseSTMT.cpp
│ │ ├── SyntaxReleaseSTMT.hpp
│ │ ├── SyntaxRollbackSTMT.cpp
│ │ ├── SyntaxRollbackSTMT.hpp
│ │ ├── SyntaxSavepointSTMT.cpp
│ │ ├── SyntaxSavepointSTMT.hpp
│ │ ├── SyntaxSelectSTMT.cpp
│ │ ├── SyntaxSelectSTMT.hpp
│ │ ├── SyntaxUpdateSTMT.cpp
│ │ ├── SyntaxUpdateSTMT.hpp
│ │ ├── SyntaxVacuumSTMT.cpp
│ │ └── SyntaxVacuumSTMT.hpp
│ ├── cpp/
│ │ ├── Operation/
│ │ │ ├── BaseOperation.cpp
│ │ │ ├── BaseOperation.hpp
│ │ │ ├── HandleORMOperation.cpp
│ │ │ ├── HandleORMOperation.hpp
│ │ │ ├── HandleOperation.cpp
│ │ │ ├── HandleOperation.hpp
│ │ │ ├── StatementOperation.cpp
│ │ │ ├── StatementOperation.hpp
│ │ │ ├── TableORMOperation.hpp
│ │ │ ├── TableOperation.cpp
│ │ │ └── TableOperation.hpp
│ │ ├── WCDBCpp.h
│ │ ├── builtin/
│ │ │ ├── Builtin.h
│ │ │ ├── Master.cpp
│ │ │ ├── Master.hpp
│ │ │ ├── Sequence.cpp
│ │ │ └── Sequence.hpp
│ │ ├── chaincall/
│ │ │ ├── ChainCall.cpp
│ │ │ ├── ChainCall.hpp
│ │ │ ├── Delete.cpp
│ │ │ ├── Delete.hpp
│ │ │ ├── Insert.hpp
│ │ │ ├── MultiObject.cpp
│ │ │ ├── MultiObject.hpp
│ │ │ ├── MultiSelect.cpp
│ │ │ ├── MultiSelect.hpp
│ │ │ ├── Select.hpp
│ │ │ └── Update.hpp
│ │ ├── core/
│ │ │ ├── CPPDeclaration.h
│ │ │ ├── CppInterface.h
│ │ │ ├── Database.cpp
│ │ │ ├── Database.hpp
│ │ │ ├── Handle.cpp
│ │ │ ├── Handle.hpp
│ │ │ ├── PreparedStatement.cpp
│ │ │ ├── PreparedStatement.hpp
│ │ │ ├── Table.cpp
│ │ │ └── Table.hpp
│ │ ├── orm/
│ │ │ ├── CPPORM.h
│ │ │ ├── binding/
│ │ │ │ ├── Accessor.cpp
│ │ │ │ ├── Accessor.hpp
│ │ │ │ ├── Binding.cpp
│ │ │ │ ├── Binding.hpp
│ │ │ │ ├── Field.cpp
│ │ │ │ ├── Field.hpp
│ │ │ │ ├── ResultField.cpp
│ │ │ │ ├── ResultField.hpp
│ │ │ │ ├── RunTimeAccessor.hpp
│ │ │ │ ├── STDOptionalAccessor.hpp
│ │ │ │ ├── SharedPtrAccessor.hpp
│ │ │ │ └── WCDBOptionalAccessor.hpp
│ │ │ ├── fts/
│ │ │ │ ├── FTSTokenizerUtil.cpp
│ │ │ │ └── FTSTokenizerUtil.hpp
│ │ │ └── macro/
│ │ │ ├── CPPBindingMacro.h
│ │ │ ├── CPPColumnConstraintMacro.h
│ │ │ ├── CPPFieldMacro.h
│ │ │ ├── CPPIndexMacro.h
│ │ │ ├── CPPORMMacro.h
│ │ │ ├── CPPTableConstraintMacro.h
│ │ │ └── CPPVirtualTableMacro.h
│ │ └── tests/
│ │ ├── common/
│ │ │ ├── CPPBaseTestCase.h
│ │ │ ├── CPPBaseTestCase.mm
│ │ │ ├── CPPCRUDTestCase.h
│ │ │ ├── CPPCRUDTestCase.mm
│ │ │ ├── CPPDatabaseTestCase.h
│ │ │ ├── CPPDatabaseTestCase.mm
│ │ │ ├── CPPORMTestUtil.h
│ │ │ ├── CPPTableTestCase.h
│ │ │ ├── CPPTableTestCase.mm
│ │ │ ├── CPPTestCase.h
│ │ │ ├── CPPTestCaseAssertion.h
│ │ │ ├── CPPTestCaseObject.cpp
│ │ │ ├── CPPTestCaseObject.h
│ │ │ ├── Random+CPPTestObject.h
│ │ │ └── Random+CPPTestObject.mm
│ │ ├── fts/
│ │ │ ├── CPPFTS3Object.h
│ │ │ ├── CPPFTS3Object.mm
│ │ │ ├── CPPFTS3Tests.mm
│ │ │ ├── CPPFTS5Object.h
│ │ │ ├── CPPFTS5Object.mm
│ │ │ └── CPPFTS5Tests.mm
│ │ ├── interface/
│ │ │ ├── CPPConfigTests.mm
│ │ │ ├── CPPDatabaseTest.mm
│ │ │ ├── CPPFileTests.mm
│ │ │ ├── CPPHandleTest.mm
│ │ │ ├── CPPTableTest.mm
│ │ │ └── CPPTraceTest.mm
│ │ ├── operation/
│ │ │ ├── ChainCallTests.mm
│ │ │ ├── HandleOperationTests.mm
│ │ │ ├── ORMDeleteTests.mm
│ │ │ ├── ORMInsertTests.mm
│ │ │ ├── ORMMultiSelectTests.mm
│ │ │ ├── ORMSelectTests.mm
│ │ │ ├── ORMUpdateTests.mm
│ │ │ └── StatementOperationTests.mm
│ │ └── orm/
│ │ ├── CPPORMTests.mm
│ │ ├── alltypes/
│ │ │ ├── CPPAllTypesObject.h
│ │ │ ├── CPPAllTypesObject.mm
│ │ │ ├── CPPSTDOptionalAllTypesObject.h
│ │ │ ├── CPPSTDOptionalAllTypesObject.mm
│ │ │ ├── CPPSharedPtrAllTypesObject.h
│ │ │ ├── CPPSharedPtrAllTypesObject.mm
│ │ │ ├── CPPWCDBOptionalAllTypesObject.h
│ │ │ └── CPPWCDBOptionalAllTypesObject.mm
│ │ ├── column_constraint/
│ │ │ ├── CPPColumnConstraintAutoIncrement.cpp
│ │ │ ├── CPPColumnConstraintAutoIncrement.hpp
│ │ │ ├── CPPColumnConstraintAutoIncrementAsc.cpp
│ │ │ ├── CPPColumnConstraintAutoIncrementAsc.hpp
│ │ │ ├── CPPColumnConstraintDefault.cpp
│ │ │ ├── CPPColumnConstraintDefault.hpp
│ │ │ ├── CPPColumnConstraintEnablePrimaryAutoIncrement.cpp
│ │ │ ├── CPPColumnConstraintEnablePrimaryAutoIncrement.hpp
│ │ │ ├── CPPColumnConstraintPrimary.cpp
│ │ │ ├── CPPColumnConstraintPrimary.hpp
│ │ │ ├── CPPColumnConstraintPrimaryAsc.cpp
│ │ │ ├── CPPColumnConstraintPrimaryAsc.hpp
│ │ │ ├── CPPColumnConstraintPrimaryDesc.cpp
│ │ │ ├── CPPColumnConstraintPrimaryDesc.hpp
│ │ │ ├── CPPColumnConstraintUnique.cpp
│ │ │ └── CPPColumnConstraintUnique.hpp
│ │ ├── field/
│ │ │ ├── CPPFieldObject.h
│ │ │ └── CPPNewFieldObject.h
│ │ ├── index_object/
│ │ │ ├── CPPIndexObject.cpp
│ │ │ └── CPPIndexObject.hpp
│ │ ├── inherit/
│ │ │ ├── CPPInheritObject.cpp
│ │ │ └── CPPInheritObject.hpp
│ │ ├── rebind/
│ │ │ ├── CPPDropIndexObject.cpp
│ │ │ ├── CPPDropIndexObject.hpp
│ │ │ ├── CPPNewRemapObject.cpp
│ │ │ ├── CPPNewRemapObject.hpp
│ │ │ ├── CPPNewlyCreatedTableIndexObject.cpp
│ │ │ ├── CPPNewlyCreatedTableIndexObject.hpp
│ │ │ ├── CPPOldRemapObject.cpp
│ │ │ └── CPPOldRemapObject.hpp
│ │ ├── table_constraint/
│ │ │ ├── CPPTableConstraintObject.cpp
│ │ │ └── CPPTableConstraintObject.hpp
│ │ └── virtual_table/
│ │ ├── CPPVirtualTableFTS4Object.cpp
│ │ ├── CPPVirtualTableFTS4Object.hpp
│ │ ├── CPPVirtualTableFTS5Object.cpp
│ │ └── CPPVirtualTableFTS5Object.hpp
│ ├── java/
│ │ ├── .gitignore
│ │ ├── annotation/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ ├── FTSModule.java
│ │ │ ├── FTSVersion.java
│ │ │ ├── MultiIndexes.java
│ │ │ ├── MultiPrimary.java
│ │ │ ├── MultiUnique.java
│ │ │ ├── WCDBDefault.java
│ │ │ ├── WCDBField.java
│ │ │ ├── WCDBIndex.java
│ │ │ └── WCDBTableCoding.java
│ │ ├── build.gradle
│ │ ├── builder/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── compiler/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── tencent/
│ │ │ │ │ └── wcdb/
│ │ │ │ │ ├── compiler/
│ │ │ │ │ │ ├── JavaAnnotationProcessor.java
│ │ │ │ │ │ ├── JavaCodeGenerator.java
│ │ │ │ │ │ ├── JavaFieldORMInfo.java
│ │ │ │ │ │ ├── KotlinAnnotationProcessor.kt
│ │ │ │ │ │ ├── KotlinCodeGenerator.kt
│ │ │ │ │ │ ├── KotlinPropertyORMInfo.kt
│ │ │ │ │ │ └── resolvedInfo/
│ │ │ │ │ │ ├── ColumnInfo.kt
│ │ │ │ │ │ ├── DefaultValueInfo.kt
│ │ │ │ │ │ ├── FTSModuleInfo.kt
│ │ │ │ │ │ ├── MultiIndexesInfo.kt
│ │ │ │ │ │ ├── MultiPrimaryInfo.kt
│ │ │ │ │ │ ├── MultiUniqueInfo.kt
│ │ │ │ │ │ ├── ResolveTool.kt
│ │ │ │ │ │ └── TableConfigInfo.kt
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── PreparedStatement.java
│ │ │ │ │ ├── fts/
│ │ │ │ │ │ └── BuiltinTokenizer.java
│ │ │ │ │ ├── orm/
│ │ │ │ │ │ ├── Binding.java
│ │ │ │ │ │ ├── Field.java
│ │ │ │ │ │ └── TableBinding.java
│ │ │ │ │ └── winq/
│ │ │ │ │ ├── Column.java
│ │ │ │ │ ├── ColumnConstraint.java
│ │ │ │ │ ├── ColumnDef.java
│ │ │ │ │ ├── ColumnType.java
│ │ │ │ │ ├── ConflictAction.java
│ │ │ │ │ ├── ExpressionOperable.java
│ │ │ │ │ ├── ForeignKey.java
│ │ │ │ │ ├── Identifier.java
│ │ │ │ │ ├── IndexedColumnConvertible.java
│ │ │ │ │ ├── Order.java
│ │ │ │ │ ├── Schema.java
│ │ │ │ │ ├── StatementCreateIndex.java
│ │ │ │ │ └── TableConstraint.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ ├── gradle/
│ │ │ │ │ └── incremental.annotation.processors
│ │ │ │ └── services/
│ │ │ │ ├── com.google.devtools.ksp.processing.SymbolProcessorProvider
│ │ │ │ └── javax.annotation.processing.Processor
│ │ │ ├── gradle-plugin/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ └── groovy/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdb/
│ │ │ │ └── gradle/
│ │ │ │ ├── WCDBOrmSourceDirectorySet.groovy
│ │ │ │ ├── WCDBOrmSourceDirectorySetG7.groovy
│ │ │ │ └── WCDBPlugin.groovy
│ │ │ └── settings.gradle
│ │ ├── compat/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ └── compat/
│ │ │ ├── DatabaseErrorHandler.java
│ │ │ ├── DatabaseUtils.java
│ │ │ ├── SQLiteCipherSpec.java
│ │ │ ├── SQLiteDatabase.java
│ │ │ ├── SQLiteStatement.java
│ │ │ └── ValueCursor.java
│ │ ├── gradle/
│ │ │ ├── WeChatPublish.gradle
│ │ │ └── wrapper/
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── kotlin-test/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ ├── androidTest/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── tencent/
│ │ │ │ └── wcdbtest/
│ │ │ │ ├── base/
│ │ │ │ │ ├── BaseTestCase.kt
│ │ │ │ │ ├── CRUDTestCase.kt
│ │ │ │ │ ├── DatabaseTestCase.kt
│ │ │ │ │ ├── ObjectCRUDTestCase.kt
│ │ │ │ │ ├── RandomTool.kt
│ │ │ │ │ ├── TableTestCase.kt
│ │ │ │ │ ├── TestObject.kt
│ │ │ │ │ └── WrappedValue.kt
│ │ │ │ ├── crud/
│ │ │ │ │ ├── ObjectDeleteTest.kt
│ │ │ │ │ ├── ObjectInsertTest.kt
│ │ │ │ │ ├── ObjectSelectTest.kt
│ │ │ │ │ └── ObjectUpdateTest.kt
│ │ │ │ └── orm/
│ │ │ │ ├── ORMTest.kt
│ │ │ │ └── testclass/
│ │ │ │ ├── AllTypeObject.kt
│ │ │ │ ├── AutoAddColumnObject.kt
│ │ │ │ ├── ColumnConstraintAutoIncrementObject.kt
│ │ │ │ ├── ColumnConstraintDefaultObject.kt
│ │ │ │ ├── ColumnConstraintDefaultZeroObject.kt
│ │ │ │ ├── ColumnConstraintNotNullObject.kt
│ │ │ │ ├── ColumnConstraintPrimaryObject.kt
│ │ │ │ ├── ColumnConstraintUniqueObject.kt
│ │ │ │ ├── DataIndexObject.kt
│ │ │ │ ├── FTS3TestObject.kt
│ │ │ │ ├── FTS5TestObject.kt
│ │ │ │ ├── FieldObject.kt
│ │ │ │ ├── IndexObject.kt
│ │ │ │ ├── NewRemapObject.kt
│ │ │ │ ├── OldRemapObject.kt
│ │ │ │ ├── PrimaryEnableAutoIncrementObject.kt
│ │ │ │ ├── PrimaryNotAutoIncrementObject.kt
│ │ │ │ └── TableConstraintObject.kt
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdbtest/
│ │ │ ├── MainActivity.kt
│ │ │ ├── RandomTool.kt
│ │ │ ├── TestObject.kt
│ │ │ └── WrappedValue.kt
│ │ ├── main/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── proguard-rules.pro
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── cpp/
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── JNIBinding.c
│ │ │ │ ├── base/
│ │ │ │ │ ├── ErrorJNI.c
│ │ │ │ │ ├── ErrorJNI.h
│ │ │ │ │ ├── WCDBExtendJNI.cpp
│ │ │ │ │ ├── WCDBJNI.c
│ │ │ │ │ └── WCDBJNI.h
│ │ │ │ ├── core/
│ │ │ │ │ ├── BindingJNI.c
│ │ │ │ │ ├── BindingJNI.h
│ │ │ │ │ ├── CoreJNI.c
│ │ │ │ │ ├── CoreJNI.h
│ │ │ │ │ ├── DatabaseExtendJNI.cpp
│ │ │ │ │ ├── DatabaseExtendJNI.h
│ │ │ │ │ ├── DatabaseJNI.c
│ │ │ │ │ ├── DatabaseJNI.h
│ │ │ │ │ ├── HandleJNI.c
│ │ │ │ │ ├── HandleJNI.h
│ │ │ │ │ ├── HandleStatementJNI.c
│ │ │ │ │ └── HandleStatementJNI.h
│ │ │ │ └── winq/
│ │ │ │ ├── Statement/
│ │ │ │ │ ├── StatementAlterTableJNI.c
│ │ │ │ │ ├── StatementAlterTableJNI.h
│ │ │ │ │ ├── StatementAnalyzeJNI.c
│ │ │ │ │ ├── StatementAnalyzeJNI.h
│ │ │ │ │ ├── StatementAttachJNI.c
│ │ │ │ │ ├── StatementAttachJNI.h
│ │ │ │ │ ├── StatementBeginJNI.c
│ │ │ │ │ ├── StatementBeginJNI.h
│ │ │ │ │ ├── StatementCommitJNI.c
│ │ │ │ │ ├── StatementCommitJNI.h
│ │ │ │ │ ├── StatementCreateTableJNI.c
│ │ │ │ │ ├── StatementCreateTableJNI.h
│ │ │ │ │ ├── StatementCreateTriggerJNI.c
│ │ │ │ │ ├── StatementCreateTriggerJNI.h
│ │ │ │ │ ├── StatementCreateViewJNI.c
│ │ │ │ │ ├── StatementCreateViewJNI.h
│ │ │ │ │ ├── StatementCreateVirtualTableJNI.c
│ │ │ │ │ ├── StatementCreateVirtualTableJNI.h
│ │ │ │ │ ├── StatementCreateindexJNI.c
│ │ │ │ │ ├── StatementCreateindexJNI.h
│ │ │ │ │ ├── StatementDeleteJNI.c
│ │ │ │ │ ├── StatementDeleteJNI.h
│ │ │ │ │ ├── StatementDetachJNI.c
│ │ │ │ │ ├── StatementDetachJNI.h
│ │ │ │ │ ├── StatementDropIndexJNI.c
│ │ │ │ │ ├── StatementDropIndexJNI.h
│ │ │ │ │ ├── StatementDropTableJNI.c
│ │ │ │ │ ├── StatementDropTableJNI.h
│ │ │ │ │ ├── StatementDropTriggerJNI.c
│ │ │ │ │ ├── StatementDropTriggerJNI.h
│ │ │ │ │ ├── StatementDropViewJNI.c
│ │ │ │ │ ├── StatementDropViewJNI.h
│ │ │ │ │ ├── StatementExplainJNI.c
│ │ │ │ │ ├── StatementExplainJNI.h
│ │ │ │ │ ├── StatementInsertJNI.c
│ │ │ │ │ ├── StatementInsertJNI.h
│ │ │ │ │ ├── StatementPragmaJNI.c
│ │ │ │ │ ├── StatementPragmaJNI.h
│ │ │ │ │ ├── StatementReindexJNI.c
│ │ │ │ │ ├── StatementReindexJNI.h
│ │ │ │ │ ├── StatementReleaseJNI.c
│ │ │ │ │ ├── StatementReleaseJNI.h
│ │ │ │ │ ├── StatementRollbackJNI.c
│ │ │ │ │ ├── StatementRollbackJNI.h
│ │ │ │ │ ├── StatementSelectJNI.c
│ │ │ │ │ ├── StatementSelectJNI.h
│ │ │ │ │ ├── StatementUpdateJNI.c
│ │ │ │ │ ├── StatementUpdateJNI.h
│ │ │ │ │ ├── StatementVacuumJNI.c
│ │ │ │ │ └── StatementVacuumJNI.h
│ │ │ │ ├── WinqJNI.c
│ │ │ │ ├── WinqJNI.h
│ │ │ │ └── identifier/
│ │ │ │ ├── BindParameterJNI.c
│ │ │ │ ├── BindParameterJNI.h
│ │ │ │ ├── ColumnConstraintJNI.c
│ │ │ │ ├── ColumnConstraintJNI.h
│ │ │ │ ├── ColumnDefJNI.c
│ │ │ │ ├── ColumnDefJNI.h
│ │ │ │ ├── ColumnJNI.c
│ │ │ │ ├── ColumnJNI.h
│ │ │ │ ├── CommonTableExpressionJNI.c
│ │ │ │ ├── CommonTableExpressionJNI.h
│ │ │ │ ├── ExpressionJNI.c
│ │ │ │ ├── ExpressionJNI.h
│ │ │ │ ├── ExpressionOperableJNI.c
│ │ │ │ ├── ExpressionOperableJNI.h
│ │ │ │ ├── ForeignKeyJNI.c
│ │ │ │ ├── ForeignKeyJNI.h
│ │ │ │ ├── FrameSpecJNI.c
│ │ │ │ ├── FrameSpecJNI.h
│ │ │ │ ├── IndexedColumnJNI.c
│ │ │ │ ├── IndexedColumnJNI.h
│ │ │ │ ├── JoinJNI.c
│ │ │ │ ├── JoinJNI.h
│ │ │ │ ├── LiteralValueJNI.c
│ │ │ │ ├── LiteralValueJNI.h
│ │ │ │ ├── OrderingTermJNI.c
│ │ │ │ ├── OrderingTermJNI.h
│ │ │ │ ├── PragmaJNI.c
│ │ │ │ ├── PragmaJNI.h
│ │ │ │ ├── QualifiedTableJNI.c
│ │ │ │ ├── QualifiedTableJNI.h
│ │ │ │ ├── RaiseFunctionJNI.c
│ │ │ │ ├── RaiseFunctionJNI.h
│ │ │ │ ├── ResultColumnJNI.c
│ │ │ │ ├── ResultColumnJNI.h
│ │ │ │ ├── SchemaJNI.c
│ │ │ │ ├── SchemaJNI.h
│ │ │ │ ├── TableConstraintJNI.c
│ │ │ │ ├── TableConstraintJNI.h
│ │ │ │ ├── TableOrSubqueryJNI.c
│ │ │ │ ├── TableOrSubqueryJNI.h
│ │ │ │ ├── UpsertJNI.c
│ │ │ │ ├── UpsertJNI.h
│ │ │ │ ├── WindowDefJNI.c
│ │ │ │ └── WindowDefJNI.h
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdb/
│ │ │ ├── base/
│ │ │ │ ├── CppObject.java
│ │ │ │ ├── CppObjectConvertible.java
│ │ │ │ ├── Value.java
│ │ │ │ ├── WCDBCorruptOrIOException.java
│ │ │ │ ├── WCDBException.java
│ │ │ │ ├── WCDBInterruptException.java
│ │ │ │ └── WCDBNormalException.java
│ │ │ ├── chaincall/
│ │ │ │ ├── ChainCall.java
│ │ │ │ ├── Delete.java
│ │ │ │ ├── Insert.java
│ │ │ │ ├── Select.java
│ │ │ │ └── Update.java
│ │ │ ├── core/
│ │ │ │ ├── Database.java
│ │ │ │ ├── Handle.java
│ │ │ │ ├── HandleORMOperation.java
│ │ │ │ ├── HandleOperation.java
│ │ │ │ ├── PausableTransaction.java
│ │ │ │ ├── PreparedStatement.java
│ │ │ │ ├── Table.java
│ │ │ │ ├── TableORMOperation.java
│ │ │ │ ├── TableOperation.java
│ │ │ │ └── Transaction.java
│ │ │ ├── fts/
│ │ │ │ ├── BuiltinFTSAuxiliaryFunction.java
│ │ │ │ └── BuiltinTokenizer.java
│ │ │ ├── orm/
│ │ │ │ ├── Binding.java
│ │ │ │ ├── Field.java
│ │ │ │ └── TableBinding.java
│ │ │ └── winq/
│ │ │ ├── BindParameter.java
│ │ │ ├── Column.java
│ │ │ ├── ColumnConstraint.java
│ │ │ ├── ColumnDef.java
│ │ │ ├── ColumnType.java
│ │ │ ├── CommonTableExpression.java
│ │ │ ├── ConflictAction.java
│ │ │ ├── Expression.java
│ │ │ ├── ExpressionConvertible.java
│ │ │ ├── ExpressionOperable.java
│ │ │ ├── ForeignKey.java
│ │ │ ├── FrameSpec.java
│ │ │ ├── Identifier.java
│ │ │ ├── IdentifierConvertible.java
│ │ │ ├── IndexedColumn.java
│ │ │ ├── IndexedColumnConvertible.java
│ │ │ ├── Join.java
│ │ │ ├── LiteralValue.java
│ │ │ ├── MultiTypeArray.java
│ │ │ ├── Order.java
│ │ │ ├── OrderingTerm.java
│ │ │ ├── Pragma.java
│ │ │ ├── QualifiedTable.java
│ │ │ ├── RaiseFunction.java
│ │ │ ├── ResultColumn.java
│ │ │ ├── ResultColumnConvertible.java
│ │ │ ├── Schema.java
│ │ │ ├── Statement.java
│ │ │ ├── StatementAlterTable.java
│ │ │ ├── StatementAnalyze.java
│ │ │ ├── StatementAttach.java
│ │ │ ├── StatementBegin.java
│ │ │ ├── StatementCommit.java
│ │ │ ├── StatementCreateIndex.java
│ │ │ ├── StatementCreateTable.java
│ │ │ ├── StatementCreateTrigger.java
│ │ │ ├── StatementCreateView.java
│ │ │ ├── StatementCreateVirtualTable.java
│ │ │ ├── StatementDelete.java
│ │ │ ├── StatementDetach.java
│ │ │ ├── StatementDropIndex.java
│ │ │ ├── StatementDropTable.java
│ │ │ ├── StatementDropTrigger.java
│ │ │ ├── StatementDropView.java
│ │ │ ├── StatementExplain.java
│ │ │ ├── StatementInsert.java
│ │ │ ├── StatementPragma.java
│ │ │ ├── StatementReindex.java
│ │ │ ├── StatementRelease.java
│ │ │ ├── StatementRollback.java
│ │ │ ├── StatementSelect.java
│ │ │ ├── StatementUpdate.java
│ │ │ ├── StatementVacuum.java
│ │ │ ├── TableConstraint.java
│ │ │ ├── TableOrSubquery.java
│ │ │ ├── TableOrSubqueryConvertible.java
│ │ │ ├── Upsert.java
│ │ │ └── WindowDef.java
│ │ ├── settings.gradle
│ │ └── test/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── tencent/
│ │ │ └── wcdbtest/
│ │ │ ├── base/
│ │ │ │ ├── BaseTestCase.java
│ │ │ │ ├── CRUDTestCase.java
│ │ │ │ ├── DatabaseTestCase.java
│ │ │ │ ├── FileTool.java
│ │ │ │ ├── ObjectCRUDTestCase.java
│ │ │ │ ├── RandomTool.java
│ │ │ │ ├── TableTestCase.java
│ │ │ │ ├── TestObject.java
│ │ │ │ ├── ValueCRUDTestCase.java
│ │ │ │ ├── WinqTool.java
│ │ │ │ └── WrappedValue.java
│ │ │ ├── crud/
│ │ │ │ ├── ChainCallTest.java
│ │ │ │ ├── FTSTest.java
│ │ │ │ ├── ObjectDeleteTest.java
│ │ │ │ ├── ObjectInsertTest.java
│ │ │ │ ├── ObjectSelectTest.java
│ │ │ │ ├── ObjectUpdateTest.java
│ │ │ │ ├── PrepareNewStatementTest.java
│ │ │ │ ├── StatementOperationTest.java
│ │ │ │ ├── ValueDeleteWithColumnTest.java
│ │ │ │ ├── ValueDeleteWithFieldTest.java
│ │ │ │ ├── ValueInsertWithColumnTest.java
│ │ │ │ ├── ValueInsertWithFieldTest.java
│ │ │ │ ├── ValueSelectWithColumnTest.java
│ │ │ │ ├── ValueSelectWithFieldTest.java
│ │ │ │ ├── ValueUpdateWithColumnTest.java
│ │ │ │ └── ValueUpdateWithFieldTest.java
│ │ │ ├── database/
│ │ │ │ ├── CompressionTest.java
│ │ │ │ ├── ConfigTest.java
│ │ │ │ ├── DatabaseTest.java
│ │ │ │ ├── FileTest.java
│ │ │ │ ├── HandleTest.java
│ │ │ │ ├── MigrationTest.java
│ │ │ │ ├── RepairTest.java
│ │ │ │ └── TraceTest.java
│ │ │ ├── orm/
│ │ │ │ ├── ORMTest.java
│ │ │ │ └── testclass/
│ │ │ │ └── AllTypeObjectHelper.java
│ │ │ ├── sample/
│ │ │ │ └── SimpleSample.java
│ │ │ └── winq/
│ │ │ ├── BindParameterTest.java
│ │ │ ├── ColumnConstraintTest.java
│ │ │ ├── ColumnDefTest.java
│ │ │ ├── ColumnTest.java
│ │ │ ├── CommonTableExpressionTest.java
│ │ │ ├── ExpressionTest.java
│ │ │ ├── ForeignKeyTest.java
│ │ │ ├── FrameSpecTest.java
│ │ │ ├── IndexedColumnTest.java
│ │ │ ├── JoinTest.java
│ │ │ ├── LiteralValueTest.java
│ │ │ ├── OrderingTermTest.java
│ │ │ ├── PragmaTest.java
│ │ │ ├── QualifiedTableTest.java
│ │ │ ├── RaiseFunctionTest.java
│ │ │ ├── ResultColumnTest.java
│ │ │ ├── SchemaTest.java
│ │ │ ├── StatementAlterTableTest.java
│ │ │ ├── StatementAnalyzeTest.java
│ │ │ ├── StatementAttachTest.java
│ │ │ ├── StatementBeginTest.java
│ │ │ ├── StatementCommitTest.java
│ │ │ ├── StatementCreateIndexTest.java
│ │ │ ├── StatementCreateTableTest.java
│ │ │ ├── StatementCreateTriggerTest.java
│ │ │ ├── StatementCreateViewTest.java
│ │ │ ├── StatementCreateVirtualTableTest.java
│ │ │ ├── StatementDeleteTest.java
│ │ │ ├── StatementDetachTest.java
│ │ │ ├── StatementDropIndexTest.java
│ │ │ ├── StatementDropTableTest.java
│ │ │ ├── StatementDropTriggerTest.java
│ │ │ ├── StatementDropViewTest.java
│ │ │ ├── StatementExplainTest.java
│ │ │ ├── StatementInsertTest.java
│ │ │ ├── StatementPragmaTest.java
│ │ │ ├── StatementReindexTest.java
│ │ │ ├── StatementReleaseTest.java
│ │ │ ├── StatementRollbackTest.java
│ │ │ ├── StatementSelectTest.java
│ │ │ ├── StatementUpdateTest.java
│ │ │ ├── StatementVacuumTest.java
│ │ │ ├── TableConstraintTest.java
│ │ │ ├── TableOrSubqueryTest.java
│ │ │ ├── UpsertTest.java
│ │ │ └── WindowDefTest.java
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ └── wcdbOrm/
│ │ └── com/
│ │ └── tencent/
│ │ └── wcdbtest/
│ │ ├── base/
│ │ │ ├── PinyinObject.java
│ │ │ ├── TestObject.java
│ │ │ └── TraditionalChineseObject.java
│ │ └── orm/
│ │ └── testclass/
│ │ ├── AllTypeObject.java
│ │ ├── AutoAddColumnObject.java
│ │ ├── ColumnConstraintAutoIncrementObject.java
│ │ ├── ColumnConstraintDefaultObject.java
│ │ ├── ColumnConstraintDefaultZeroObject.java
│ │ ├── ColumnConstraintNotNullObject.java
│ │ ├── ColumnConstraintPrimaryObject.java
│ │ ├── ColumnConstraintUniqueObject.java
│ │ ├── FTS3TestObject.java
│ │ ├── FTS5TestObject.java
│ │ ├── FieldObject.java
│ │ ├── IndexObject.java
│ │ ├── MMICUTestObject.java
│ │ ├── NewRemapObject.java
│ │ ├── OldRemapObject.java
│ │ ├── PrimaryEnableAutoIncrementObject.java
│ │ ├── PrimaryNotAutoIncrementObject.java
│ │ └── TableConstraintObject.java
│ ├── objc/
│ │ ├── Interface.h
│ │ ├── WCDBObjc.h
│ │ ├── bridge/
│ │ │ ├── WCTBridgeProperty+CPP.h
│ │ │ ├── WCTBridgeProperty.h
│ │ │ └── WCTBridgeProperty.mm
│ │ ├── builtin/
│ │ │ ├── NSData+WCTColumnCoding.h
│ │ │ ├── NSData+WCTColumnCoding.mm
│ │ │ ├── NSDate+WCTColumnCoding.h
│ │ │ ├── NSDate+WCTColumnCoding.mm
│ │ │ ├── NSNull+WCTColumnCoding.h
│ │ │ ├── NSNull+WCTColumnCoding.mm
│ │ │ ├── NSNumber+WCTColumnCoding.h
│ │ │ ├── NSNumber+WCTColumnCoding.mm
│ │ │ ├── NSObject+WCTColumnCoding.h
│ │ │ ├── NSObject+WCTColumnCoding.mm
│ │ │ ├── NSString+WCTColumnCoding.h
│ │ │ ├── NSString+WCTColumnCoding.mm
│ │ │ ├── WCTBuiltin.h
│ │ │ ├── WCTMaster+WCTTableCoding.h
│ │ │ ├── WCTMaster.h
│ │ │ ├── WCTMaster.mm
│ │ │ ├── WCTSequence+WCTTableCoding.h
│ │ │ ├── WCTSequence.h
│ │ │ └── WCTSequence.mm
│ │ ├── chaincall/
│ │ │ ├── WCTChainCall+Private.h
│ │ │ ├── WCTChainCall.h
│ │ │ ├── WCTChainCall.mm
│ │ │ ├── WCTDatabase+ChainCall.h
│ │ │ ├── WCTDatabase+ChainCall.mm
│ │ │ ├── WCTDelete.h
│ │ │ ├── WCTDelete.mm
│ │ │ ├── WCTHandle+ChainCall.h
│ │ │ ├── WCTHandle+ChainCall.mm
│ │ │ ├── WCTInsert.h
│ │ │ ├── WCTInsert.mm
│ │ │ ├── WCTMultiSelect.h
│ │ │ ├── WCTMultiSelect.mm
│ │ │ ├── WCTSelect.h
│ │ │ ├── WCTSelect.mm
│ │ │ ├── WCTSelectable+Private.h
│ │ │ ├── WCTSelectable.h
│ │ │ ├── WCTSelectable.mm
│ │ │ ├── WCTTable+ChainCall.h
│ │ │ ├── WCTTable+ChainCall.mm
│ │ │ ├── WCTTryDisposeGuard.h
│ │ │ ├── WCTTryDisposeGuard.mm
│ │ │ ├── WCTUpdate.h
│ │ │ └── WCTUpdate.mm
│ │ ├── compression/
│ │ │ ├── WCTCompressionInfo+Private.h
│ │ │ ├── WCTCompressionInfo.h
│ │ │ ├── WCTCompressionInfo.mm
│ │ │ ├── WCTDatabase+Compression.h
│ │ │ └── WCTDatabase+Compression.mm
│ │ ├── convenient/
│ │ │ ├── WCTConvenient.h
│ │ │ ├── WCTDatabase+Convenient.h
│ │ │ ├── WCTDatabase+Convenient.mm
│ │ │ ├── WCTHandle+Convenient.h
│ │ │ ├── WCTHandle+Convenient.mm
│ │ │ ├── WCTTable+Convenient.h
│ │ │ └── WCTTable+Convenient.mm
│ │ ├── core/
│ │ │ ├── WCTCommon.h
│ │ │ ├── WCTConvertible.h
│ │ │ ├── WCTConvertible.mm
│ │ │ ├── WCTDatabase+Test.h
│ │ │ ├── WCTDatabase+Test.mm
│ │ │ ├── WCTDatabase+Version.h
│ │ │ ├── WCTDatabase+Version.mm
│ │ │ ├── WCTDeclaration.h
│ │ │ ├── WCTFTSTokenizerUtil.h
│ │ │ ├── WCTFTSTokenizerUtil.mm
│ │ │ ├── WCTFileManager.mm
│ │ │ ├── WCTFoundation.h
│ │ │ ├── WCTFoundation.mm
│ │ │ ├── WCTOperationQueue.mm
│ │ │ ├── WCTOptional.h
│ │ │ ├── WCTOptional.mm
│ │ │ ├── WCTTag.h
│ │ │ ├── WCTValue.h
│ │ │ └── WCTValue.mm
│ │ ├── database/
│ │ │ ├── WCTDatabase+Config.h
│ │ │ ├── WCTDatabase+Config.mm
│ │ │ ├── WCTDatabase+File.h
│ │ │ ├── WCTDatabase+File.mm
│ │ │ ├── WCTDatabase+Memory.h
│ │ │ ├── WCTDatabase+Memory.mm
│ │ │ ├── WCTDatabase+Private.h
│ │ │ ├── WCTDatabase+Repair.h
│ │ │ ├── WCTDatabase+Repair.mm
│ │ │ ├── WCTDatabase.h
│ │ │ └── WCTDatabase.mm
│ │ ├── fts/
│ │ │ ├── WCTDatabase+FTS.h
│ │ │ └── WCTDatabase+FTS.mm
│ │ ├── handle/
│ │ │ ├── WCTCancellationSignal+Private.h
│ │ │ ├── WCTCancellationSignal.h
│ │ │ ├── WCTCancellationSignal.mm
│ │ │ ├── WCTDatabase+Handle.h
│ │ │ ├── WCTDatabase+Handle.mm
│ │ │ ├── WCTHandle+Private.h
│ │ │ ├── WCTHandle.h
│ │ │ └── WCTHandle.mm
│ │ ├── migration/
│ │ │ ├── WCTDatabase+Migration.h
│ │ │ ├── WCTDatabase+Migration.mm
│ │ │ ├── WCTMigrationInfo+Private.h
│ │ │ ├── WCTMigrationInfo.h
│ │ │ └── WCTMigrationInfo.mm
│ │ ├── monitor/
│ │ │ ├── WCTDatabase+Monitor.h
│ │ │ ├── WCTDatabase+Monitor.mm
│ │ │ ├── WCTError+Private.h
│ │ │ ├── WCTError.h
│ │ │ ├── WCTError.mm
│ │ │ ├── WCTPerformanceInfo+Private.h
│ │ │ ├── WCTPerformanceInfo.h
│ │ │ └── WCTPerformanceInfo.mm
│ │ ├── orm/
│ │ │ ├── WCTORM.h
│ │ │ ├── accessor/
│ │ │ │ ├── WCTBaseAccessor.h
│ │ │ │ ├── WCTBaseAccessor.mm
│ │ │ │ ├── WCTCppAccessor.h
│ │ │ │ ├── WCTObjCAccessor.h
│ │ │ │ ├── WCTObjCAccessor.mm
│ │ │ │ ├── WCTRuntimeBaseAccessor.h
│ │ │ │ ├── WCTRuntimeBaseAccessor.mm
│ │ │ │ ├── WCTRuntimeCppAccessor.h
│ │ │ │ ├── WCTRuntimeObjCAccessor.h
│ │ │ │ └── WCTRuntimeObjCAccessor.mm
│ │ │ ├── binding/
│ │ │ │ ├── WCTBinding.h
│ │ │ │ ├── WCTBinding.mm
│ │ │ │ ├── WCTColumnBinding.h
│ │ │ │ └── WCTColumnBinding.mm
│ │ │ ├── coding/
│ │ │ │ ├── WCTColumnCoding.h
│ │ │ │ ├── WCTProperty.h
│ │ │ │ ├── WCTProperty.mm
│ │ │ │ ├── WCTResultColumn.h
│ │ │ │ ├── WCTResultColumn.mm
│ │ │ │ └── WCTTableCoding.h
│ │ │ └── macro/
│ │ │ ├── WCTColumnConstraintMacro.h
│ │ │ ├── WCTIndexMacro.h
│ │ │ ├── WCTMacro.h
│ │ │ ├── WCTMacroUtility.h
│ │ │ ├── WCTPropertyMacro.h
│ │ │ ├── WCTTableConstraintMacro.h
│ │ │ └── WCTVirtualTableMacro.h
│ │ ├── statement/
│ │ │ ├── WCTPreparedStatement+Private.h
│ │ │ ├── WCTPreparedStatement.h
│ │ │ └── WCTPreparedStatement.mm
│ │ ├── table/
│ │ │ ├── WCTDatabase+Table.h
│ │ │ ├── WCTDatabase+Table.mm
│ │ │ ├── WCTHandle+Table.h
│ │ │ ├── WCTHandle+Table.mm
│ │ │ ├── WCTTable+Private.h
│ │ │ ├── WCTTable+Table.h
│ │ │ ├── WCTTable+Table.mm
│ │ │ ├── WCTTable.h
│ │ │ ├── WCTTable.mm
│ │ │ └── WCTTableProtocol.h
│ │ ├── tests/
│ │ │ ├── advance/
│ │ │ │ ├── chaincall/
│ │ │ │ │ ├── ChainCallTests.mm
│ │ │ │ │ └── MultiSelectTests.mm
│ │ │ │ ├── column_coding/
│ │ │ │ │ ├── ColumnCodingObject+WCTTableCoding.h
│ │ │ │ │ ├── ColumnCodingObject.h
│ │ │ │ │ ├── ColumnCodingObject.mm
│ │ │ │ │ ├── ColumnCodingTests.mm
│ │ │ │ │ ├── DataCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── DataCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── DataCodingObject.h
│ │ │ │ │ ├── DataCodingObject.m
│ │ │ │ │ ├── DoubleCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── DoubleCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── DoubleCodingObject.h
│ │ │ │ │ ├── DoubleCodingObject.m
│ │ │ │ │ ├── IntegerCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── IntegerCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── IntegerCodingObject.h
│ │ │ │ │ ├── IntegerCodingObject.m
│ │ │ │ │ ├── Random+ColumnCodingObject.h
│ │ │ │ │ ├── Random+ColumnCodingObject.mm
│ │ │ │ │ ├── StringCodingObject+WCTColumnCoding.h
│ │ │ │ │ ├── StringCodingObject+WCTColumnCoding.mm
│ │ │ │ │ ├── StringCodingObject.h
│ │ │ │ │ └── StringCodingObject.m
│ │ │ │ └── handle/
│ │ │ │ └── HandleTests.mm
│ │ │ ├── basic/
│ │ │ │ ├── FileTests.mm
│ │ │ │ ├── ObservationTests.mm
│ │ │ │ └── TableTests.mm
│ │ │ ├── benchmark/
│ │ │ │ ├── BaselineBenchmark.mm
│ │ │ │ ├── CipherBenchmark.mm
│ │ │ │ ├── CompressionBenchmark.h
│ │ │ │ ├── CompressionBenchmark.mm
│ │ │ │ ├── DatabaseMigrationBenchmark.mm
│ │ │ │ ├── DictCompressionBenchmark.mm
│ │ │ │ ├── MigrationBenchmark.h
│ │ │ │ ├── MigrationBenchmark.mm
│ │ │ │ ├── NormalCompressionBenchmark.mm
│ │ │ │ ├── ObjectsBasedBenchmark.h
│ │ │ │ ├── ObjectsBasedBenchmark.mm
│ │ │ │ ├── RetrieveBenchmark.mm
│ │ │ │ ├── TableBenchmark.mm
│ │ │ │ ├── TableMigrationBenchmark.mm
│ │ │ │ └── VacuumBenchmark.mm
│ │ │ ├── common/
│ │ │ │ ├── BaseTestCase.h
│ │ │ │ ├── BaseTestCase.mm
│ │ │ │ ├── Benchmark.h
│ │ │ │ ├── Benchmark.mm
│ │ │ │ ├── CRUDTestCase.h
│ │ │ │ ├── CRUDTestCase.mm
│ │ │ │ ├── DatabaseTestCase.h
│ │ │ │ ├── DatabaseTestCase.mm
│ │ │ │ ├── RobustyTestCase.h
│ │ │ │ ├── RobustyTestCase.mm
│ │ │ │ ├── TableTestCase.h
│ │ │ │ ├── TableTestCase.mm
│ │ │ │ ├── TestCase.h
│ │ │ │ ├── factory/
│ │ │ │ │ ├── ObjectsBasedFactory.h
│ │ │ │ │ ├── ObjectsBasedFactory.mm
│ │ │ │ │ ├── PrototypeFactory.h
│ │ │ │ │ ├── PrototypeFactory.mm
│ │ │ │ │ ├── SizeBasedFactory.h
│ │ │ │ │ ├── SizeBasedFactory.mm
│ │ │ │ │ ├── TablesBasedFactory.h
│ │ │ │ │ └── TablesBasedFactory.mm
│ │ │ │ ├── object/
│ │ │ │ │ ├── AllTypesObject+WCTTableCoding.h
│ │ │ │ │ ├── AllTypesObject.h
│ │ │ │ │ ├── AllTypesObject.mm
│ │ │ │ │ ├── TestCaseObject+WCTTableCoding.h
│ │ │ │ │ ├── TestCaseObject.h
│ │ │ │ │ └── TestCaseObject.mm
│ │ │ │ ├── random/
│ │ │ │ │ ├── Random+TestCaseObject.h
│ │ │ │ │ ├── Random+TestCaseObject.mm
│ │ │ │ │ ├── Random+WCDB.h
│ │ │ │ │ ├── Random+WCDB.mm
│ │ │ │ │ ├── Random.h
│ │ │ │ │ └── Random.mm
│ │ │ │ └── utility/
│ │ │ │ ├── Dispatch.h
│ │ │ │ ├── Dispatch.mm
│ │ │ │ ├── NSObject+TestCase.h
│ │ │ │ ├── NSObject+TestCase.mm
│ │ │ │ ├── Signpost.h
│ │ │ │ ├── Signpost.mm
│ │ │ │ ├── TestCaseAssertion.h
│ │ │ │ ├── TestCaseCounter.h
│ │ │ │ ├── TestCaseCounter.mm
│ │ │ │ ├── TestCaseLog.h
│ │ │ │ ├── TestCaseLog.mm
│ │ │ │ ├── TestCaseMacro.h
│ │ │ │ ├── TestCaseResult.h
│ │ │ │ ├── TestCaseResult.mm
│ │ │ │ ├── WCTDatabase+TestCase.h
│ │ │ │ └── WCTDatabase+TestCase.mm
│ │ │ ├── compression/
│ │ │ │ ├── common/
│ │ │ │ │ ├── CompressionTestCase.h
│ │ │ │ │ ├── CompressionTestCase.mm
│ │ │ │ │ ├── CompressionTestObject.h
│ │ │ │ │ ├── CompressionTestObject.mm
│ │ │ │ │ ├── Random+CompressionTestObject.h
│ │ │ │ │ └── Random+CompressionTestObject.mm
│ │ │ │ └── compatible/
│ │ │ │ ├── CompressRobustyTests.mm
│ │ │ │ ├── CompressingCRUDTest.mm
│ │ │ │ └── CompressionTests.mm
│ │ │ ├── config/
│ │ │ │ ├── ConfigTests.mm
│ │ │ │ └── DatabaseTests.mm
│ │ │ ├── convenient/
│ │ │ │ ├── ConvenientDeleteTests.mm
│ │ │ │ ├── ConvenientInsertTests.mm
│ │ │ │ ├── ConvenientSelectTests.mm
│ │ │ │ └── ConvenientUpdateTests.mm
│ │ │ ├── fts/
│ │ │ │ ├── FTS3Object+WCTTableCoding.h
│ │ │ │ ├── FTS3Object.h
│ │ │ │ ├── FTS3Object.mm
│ │ │ │ ├── FTS3Tests.mm
│ │ │ │ ├── FTS5Object.h
│ │ │ │ ├── FTS5Object.mm
│ │ │ │ └── FTS5Test.mm
│ │ │ ├── host/
│ │ │ │ ├── Info.plist
│ │ │ │ ├── host.xcconfig
│ │ │ │ └── main.m
│ │ │ ├── migration/
│ │ │ │ ├── common/
│ │ │ │ │ ├── MigrationCompatibleTestCase.mm
│ │ │ │ │ ├── MigrationObject.mm
│ │ │ │ │ ├── MigrationTestCase.h
│ │ │ │ │ ├── MigrationTestCase.mm
│ │ │ │ │ ├── MigrationTestObject.h
│ │ │ │ │ ├── MigrationTestObjectBase.h
│ │ │ │ │ ├── MigrationTestObjectBase.mm
│ │ │ │ │ ├── MigrationTestSourceObject.h
│ │ │ │ │ ├── Random+MigrationTestObject.h
│ │ │ │ │ └── Random+MigrationTestObject.mm
│ │ │ │ ├── compatible/
│ │ │ │ │ ├── CipherMigrationTests.mm
│ │ │ │ │ ├── MigrateTests.mm
│ │ │ │ │ └── MigratingCRUDTests.mm
│ │ │ │ ├── increment/
│ │ │ │ │ ├── AutoIncrementDatabaseMigratingCompatibleTests.mm
│ │ │ │ │ ├── AutoIncrementDatabaseMigrationCompatibleTests.mm
│ │ │ │ │ ├── AutoIncrementTableMigratingCompatibleTests.mm
│ │ │ │ │ └── AutoIncrementTableMigrationCompatibleTests.mm
│ │ │ │ ├── model/
│ │ │ │ │ ├── AutoIncrementMigrationObject.h
│ │ │ │ │ ├── AutoIncrementMigrationObject.mm
│ │ │ │ │ ├── AutoIncrementMigrationSourceObject.h
│ │ │ │ │ ├── AutoIncrementMigrationSourceObject.mm
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationObject.h
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationObject.mm
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationSourceObject.h
│ │ │ │ │ ├── IntegerPrimaryKeyMigrationSourceObject.mm
│ │ │ │ │ ├── NormalMigrationObject.h
│ │ │ │ │ ├── NormalMigrationObject.mm
│ │ │ │ │ ├── NormalMigrationSourceObject.h
│ │ │ │ │ └── NormalMigrationSourceObject.mm
│ │ │ │ ├── normal/
│ │ │ │ │ ├── CipherDatabaseMigratingCompatibleTests.mm
│ │ │ │ │ └── CipherDatabaseMigrationCompatibleTests.mm
│ │ │ │ └── primary/
│ │ │ │ ├── PrimaryKeyDatabaseMigratingCompatibleTests.mm
│ │ │ │ ├── PrimaryKeyDatabaseMigrationCompatibleTests.mm
│ │ │ │ ├── PrimaryKeyTableMigratingCompatibleTests.mm
│ │ │ │ └── PrimaryKeyTableMigrationCompatibleTests.mm
│ │ │ ├── monitor/
│ │ │ │ ├── TraceTests.mm
│ │ │ │ └── VersionTests.mm
│ │ │ ├── orm/
│ │ │ │ ├── ORMTests.mm
│ │ │ │ ├── addtional/
│ │ │ │ │ ├── AdditionalORMObject+WCTTableCoding.h
│ │ │ │ │ ├── AdditionalORMObject.h
│ │ │ │ │ └── AdditionalORMObject.mm
│ │ │ │ ├── column_constraint/
│ │ │ │ │ ├── ColumnConstraintAutoIncrement+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrement.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrement.mm
│ │ │ │ │ ├── ColumnConstraintAutoIncrementAsc+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrementAsc.h
│ │ │ │ │ ├── ColumnConstraintAutoIncrementAsc.mm
│ │ │ │ │ ├── ColumnConstraintCheck+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintCheck.h
│ │ │ │ │ ├── ColumnConstraintCheck.mm
│ │ │ │ │ ├── ColumnConstraintDefault+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintDefault.h
│ │ │ │ │ ├── ColumnConstraintDefault.mm
│ │ │ │ │ ├── ColumnConstraintEnablePrimaryAutoIncrement+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintEnablePrimaryAutoIncrement.h
│ │ │ │ │ ├── ColumnConstraintEnablePrimaryAutoIncrement.mm
│ │ │ │ │ ├── ColumnConstraintNotNull+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintNotNull.h
│ │ │ │ │ ├── ColumnConstraintNotNull.mm
│ │ │ │ │ ├── ColumnConstraintPrimary+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintPrimary.h
│ │ │ │ │ ├── ColumnConstraintPrimary.mm
│ │ │ │ │ ├── ColumnConstraintPrimaryAsc+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintPrimaryAsc.h
│ │ │ │ │ ├── ColumnConstraintPrimaryAsc.mm
│ │ │ │ │ ├── ColumnConstraintPrimaryDesc+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintPrimaryDesc.h
│ │ │ │ │ ├── ColumnConstraintPrimaryDesc.mm
│ │ │ │ │ ├── ColumnConstraintUnique+WCTTableCoding.h
│ │ │ │ │ ├── ColumnConstraintUnique.h
│ │ │ │ │ └── ColumnConstraintUnique.mm
│ │ │ │ ├── index/
│ │ │ │ │ ├── IndexObject+WCTTableCoding.h
│ │ │ │ │ ├── IndexObject.h
│ │ │ │ │ └── IndexObject.mm
│ │ │ │ ├── property/
│ │ │ │ │ ├── NewPropertyObject.h
│ │ │ │ │ ├── NewPropertyObject.mm
│ │ │ │ │ ├── PropertyObject+WCTTableCoding.h
│ │ │ │ │ ├── PropertyObject.h
│ │ │ │ │ └── PropertyObject.mm
│ │ │ │ ├── rebind/
│ │ │ │ │ ├── DropIndexObject+WCTTableCoding.h
│ │ │ │ │ ├── DropIndexObject.h
│ │ │ │ │ ├── DropIndexObject.mm
│ │ │ │ │ ├── NewRemapObject+WCTTableCoding.h
│ │ │ │ │ ├── NewRemapObject.h
│ │ │ │ │ ├── NewRemapObject.mm
│ │ │ │ │ ├── NewlyCreatedTableIndexObject+WCTTableCoding.h
│ │ │ │ │ ├── NewlyCreatedTableIndexObject.h
│ │ │ │ │ ├── NewlyCreatedTableIndexObject.mm
│ │ │ │ │ ├── OldRemapObject+WCTTableCoding.h
│ │ │ │ │ ├── OldRemapObject.h
│ │ │ │ │ └── OldRemapObject.mm
│ │ │ │ ├── table_constraint/
│ │ │ │ │ ├── TableConstraintObject+WCTTableCoding.h
│ │ │ │ │ ├── TableConstraintObject.h
│ │ │ │ │ └── TableConstraintObject.mm
│ │ │ │ └── virtual_table/
│ │ │ │ ├── VirtualTableFTS4Object+WCTTableCoding.h
│ │ │ │ ├── VirtualTableFTS4Object.h
│ │ │ │ ├── VirtualTableFTS4Object.mm
│ │ │ │ ├── VirtualTableFTS5Object+WCTTableCoding.h
│ │ │ │ ├── VirtualTableFTS5Object.h
│ │ │ │ └── VirtualTableFTS5Object.mm
│ │ │ ├── repair/
│ │ │ │ ├── BackupTests.mm
│ │ │ │ ├── DepositTests.mm
│ │ │ │ ├── RetrieveRobustyTests.mm
│ │ │ │ ├── RetrieveTests.mm
│ │ │ │ ├── VacuumRobustyTests.mm
│ │ │ │ ├── VacuumTests.mm
│ │ │ │ ├── common/
│ │ │ │ │ ├── BackupTestCase.h
│ │ │ │ │ ├── BackupTestCase.mm
│ │ │ │ │ ├── Random+RepairTestObject.h
│ │ │ │ │ ├── Random+RepairTestObject.mm
│ │ │ │ │ ├── RepairTestObject.h
│ │ │ │ │ ├── RepairTestObjectBase.h
│ │ │ │ │ └── RepairTestObjectBase.mm
│ │ │ │ └── model/
│ │ │ │ ├── AutoIncrementRepairTestObject.h
│ │ │ │ ├── AutoIncrementRepairTestObject.mm
│ │ │ │ ├── NormalRepairTestObject.h
│ │ │ │ ├── NormalRepairTestObject.mm
│ │ │ │ ├── WithoutRowidRepairTestObject.h
│ │ │ │ └── WithoutRowidRepairTestObject.mm
│ │ │ ├── thread/
│ │ │ │ ├── ThreadTests.mm
│ │ │ │ └── TransactionTests.mm
│ │ │ └── winq/
│ │ │ ├── AggregateFunctionTests.mm
│ │ │ ├── BindParameterTests.mm
│ │ │ ├── ColumnConstraintTests.mm
│ │ │ ├── ColumnDefTests.mm
│ │ │ ├── ColumnOperableTests.mm
│ │ │ ├── ColumnTests.mm
│ │ │ ├── ColumnTypeTests.mm
│ │ │ ├── CommonTableExpressionTests.mm
│ │ │ ├── ConflictTests.mm
│ │ │ ├── CoreFunctionTests.mm
│ │ │ ├── ExpressionOperableTests.mm
│ │ │ ├── ExpressionTests.mm
│ │ │ ├── FTSFunctionTests.mm
│ │ │ ├── FilterTests.mm
│ │ │ ├── ForeignKeyTests.mm
│ │ │ ├── FrameSpecTests.mm
│ │ │ ├── IndexedColumnTests.mm
│ │ │ ├── JoinConstraintTests.mm
│ │ │ ├── JoinTests.mm
│ │ │ ├── LiteralValueTests.mm
│ │ │ ├── OrderTests.mm
│ │ │ ├── OrderingTermTests.mm
│ │ │ ├── PragmaTests.mm
│ │ │ ├── QualifiedTableTests.mm
│ │ │ ├── RaiseFunctionTests.mm
│ │ │ ├── ResultColumnTests.mm
│ │ │ ├── SchemaTests.mm
│ │ │ ├── StatementAlterTableTests.mm
│ │ │ ├── StatementAnalyzeTests.mm
│ │ │ ├── StatementAttachTests.mm
│ │ │ ├── StatementBeginTests.mm
│ │ │ ├── StatementCommitTests.mm
│ │ │ ├── StatementCreateIndexTests.mm
│ │ │ ├── StatementCreateTableTests.mm
│ │ │ ├── StatementCreateTriggerTests.mm
│ │ │ ├── StatementCreateViewTests.mm
│ │ │ ├── StatementCreateVirtualTableTests.mm
│ │ │ ├── StatementDeleteTests.mm
│ │ │ ├── StatementDetachTests.mm
│ │ │ ├── StatementDropIndexTests.mm
│ │ │ ├── StatementDropTableTests.mm
│ │ │ ├── StatementDropTriggerTests.mm
│ │ │ ├── StatementDropViewTests.mm
│ │ │ ├── StatementExplainTests.mm
│ │ │ ├── StatementInsertTests.mm
│ │ │ ├── StatementPragmaTests.mm
│ │ │ ├── StatementReindexTests.mm
│ │ │ ├── StatementReleaseTests.mm
│ │ │ ├── StatementRollbackTests.mm
│ │ │ ├── StatementSavepointTests.mm
│ │ │ ├── StatementSelectTests.mm
│ │ │ ├── StatementTests.mm
│ │ │ ├── StatementUpdateTests.mm
│ │ │ ├── StatementVacuumTests.mm
│ │ │ ├── StoppableIterationTests.mm
│ │ │ ├── SyntaxListTests.mm
│ │ │ ├── TableConstraintTests.mm
│ │ │ ├── TableOrSubqueryTests.mm
│ │ │ ├── UpsertTests.mm
│ │ │ ├── ValueTests.mm
│ │ │ ├── WCTPropertyTests.mm
│ │ │ ├── WCTResultColumnTests.mm
│ │ │ ├── WINQAssertion.h
│ │ │ ├── WINQAssertion.mm
│ │ │ └── WindowDefTests.mm
│ │ └── transaction/
│ │ ├── WCTDatabase+Transaction.h
│ │ ├── WCTDatabase+Transaction.mm
│ │ ├── WCTHandle+Transaction.h
│ │ ├── WCTHandle+Transaction.mm
│ │ └── WCTTransaction.h
│ ├── support/
│ │ ├── Base.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Info.plist
│ │ ├── Release.xcconfig
│ │ ├── Tests.xcconfig
│ │ ├── WCDB.modulemap
│ │ ├── WCDB.xcconfig
│ │ ├── WCDBCpp.modulemap
│ │ ├── WCDBObjc.modulemap
│ │ ├── WCDBSwift.modulemap
│ │ ├── WCDBSwift.xcconfig
│ │ ├── WCDBWithoutCompression.xcconfig
│ │ ├── ZstdBase.xcconfig
│ │ ├── ZstdDebug.xcconfig
│ │ └── ZstdRelease.xcconfig
│ ├── swift/
│ │ ├── bridge/
│ │ │ ├── ErrorBridge.swift
│ │ │ ├── FTSBridge.swift
│ │ │ ├── ObjectBridge.swift
│ │ │ └── WCTBridgeProperty.swift
│ │ ├── builtin/
│ │ │ ├── CodableType.swift
│ │ │ └── Master.swift
│ │ ├── core/
│ │ │ ├── base/
│ │ │ │ ├── BaseType.swift
│ │ │ │ ├── Database+WCTTableCoding.swift
│ │ │ │ ├── Database.swift
│ │ │ │ ├── Handle+WCTTableCoding.swift
│ │ │ │ ├── Handle.swift
│ │ │ │ ├── HandleStatement+WCTTableCoding.swift
│ │ │ │ ├── PreparedStatement.swift
│ │ │ │ ├── Table+WCTTableCoding.swift
│ │ │ │ └── Table.swift
│ │ │ ├── binding/
│ │ │ │ ├── CheckExpressionConfig.swift
│ │ │ │ ├── ColumnConstraintConfig.swift
│ │ │ │ ├── ForeignKeyConfig.swift
│ │ │ │ ├── IndexConfig.swift
│ │ │ │ ├── MultiPrimaryConfig.swift
│ │ │ │ ├── MultiUniqueConfig.swift
│ │ │ │ ├── Property.swift
│ │ │ │ ├── Redirectable.swift
│ │ │ │ ├── TableBinding.swift
│ │ │ │ ├── TableConfiguration.swift
│ │ │ │ └── VirtualTableConfig.swift
│ │ │ ├── chaincall/
│ │ │ │ ├── ChainCall+WCTTableCoding.swift
│ │ │ │ ├── ChainCall.swift
│ │ │ │ ├── Declare.swift
│ │ │ │ ├── Delete.swift
│ │ │ │ ├── Insert+WCTTableCoding.swift
│ │ │ │ ├── Insert.swift
│ │ │ │ ├── MultiSelect.swift
│ │ │ │ ├── RowSelect.swift
│ │ │ │ ├── Select+WCTTableCoding.swift
│ │ │ │ ├── Select.swift
│ │ │ │ ├── Selectable.swift
│ │ │ │ ├── TableChainCall+WCTTableCoding.swift
│ │ │ │ ├── TableChainCall.swift
│ │ │ │ ├── Update+WCTTableCoding.swift
│ │ │ │ └── Update.swift
│ │ │ ├── codable/
│ │ │ │ ├── CodingTableKey.swift
│ │ │ │ ├── ColumnCodable.swift
│ │ │ │ ├── ColumnTypeDecoder.swift
│ │ │ │ ├── TableCodable.swift
│ │ │ │ ├── TableDecoder.swift
│ │ │ │ └── TableEncoder.swift
│ │ │ └── interface/
│ │ │ ├── DeleteInterface.swift
│ │ │ ├── InsertInterface+WCTTableCoding.swift
│ │ │ ├── InsertInterface.swift
│ │ │ ├── SelectInterface+WCTTableCoding.swift
│ │ │ ├── SelectInterface.swift
│ │ │ ├── StatementInterface+WCTTableCoding.swift
│ │ │ ├── StatementInterface.swift
│ │ │ ├── StatementSelectInterface.swift
│ │ │ ├── TableCRUDInterface+WCTTableCoding.swift
│ │ │ ├── TableCRUDInterface.swift
│ │ │ ├── TableInterface+WCTTableCoding.swift
│ │ │ ├── TableInterface.swift
│ │ │ ├── TransactionInterface.swift
│ │ │ ├── UpdateInterface+WCTTableCoding.swift
│ │ │ └── UpdateInterface.swift
│ │ ├── tests/
│ │ │ ├── benchmark/
│ │ │ │ ├── baseline/
│ │ │ │ │ ├── BaselineBatchWriteBenchmark.swift
│ │ │ │ │ ├── BaselineReadBenchmark.swift
│ │ │ │ │ └── BaselineWriteBenchmark.swift
│ │ │ │ ├── cipher/
│ │ │ │ │ ├── CipherReadBenchmark.swift
│ │ │ │ │ └── CipherWriteBenchmark.swift
│ │ │ │ ├── multithread/
│ │ │ │ │ ├── BaseMultithreadBenchmark.swift
│ │ │ │ │ ├── MultithreadReadReadBenchmark.swift
│ │ │ │ │ ├── MultithreadReadWriteBenchmark.swift
│ │ │ │ │ └── MultithreadWriteWriteBenchmark.swift
│ │ │ │ ├── other/
│ │ │ │ │ ├── InitializationBenchmark.swift
│ │ │ │ │ └── SyncWriteBenchmark.swift
│ │ │ │ └── supporting/
│ │ │ │ ├── BaseBenchmark.swift
│ │ │ │ ├── BenchmarkObject.swift
│ │ │ │ └── Config.swift
│ │ │ ├── common/
│ │ │ │ ├── Assert.swift
│ │ │ │ ├── BaseTestCase.swift
│ │ │ │ ├── Convenience.swift
│ │ │ │ ├── DatabaseTestCase.swift
│ │ │ │ ├── Random.swift
│ │ │ │ ├── RandomData.swift
│ │ │ │ └── TestObject.swift
│ │ │ ├── crud/
│ │ │ │ ├── AdvanceCRUDTests.swift
│ │ │ │ ├── AdvanceTests.swift
│ │ │ │ ├── CRUDTestCase.swift
│ │ │ │ ├── DatabaseTests.swift
│ │ │ │ ├── DeleteInterfaceTests.swift
│ │ │ │ ├── DeleteTests.swift
│ │ │ │ ├── InsertInterfaceTests.swift
│ │ │ │ ├── InsertTests.swift
│ │ │ │ ├── MultiSelectTests.swift
│ │ │ │ ├── MultithreadTests.swift
│ │ │ │ ├── RowSelectTests.swift
│ │ │ │ ├── SelectInterfaceTests.swift
│ │ │ │ ├── SelectTests.swift
│ │ │ │ ├── TableTests.swift
│ │ │ │ ├── TypedTests.swift
│ │ │ │ ├── UpdateInterfaceTests.swift
│ │ │ │ └── UpdateTests.swift
│ │ │ ├── orm/
│ │ │ │ ├── AutoAddColumnTests.swift
│ │ │ │ ├── ColumnConstraintBindingTests.swift
│ │ │ │ ├── IndexBindingTests.swift
│ │ │ │ ├── ORMTestCase.swift
│ │ │ │ ├── TableConstraintBindingTests.swift
│ │ │ │ └── VirtualTableBindingTests.swift
│ │ │ ├── other/
│ │ │ │ ├── FileTests.swift
│ │ │ │ ├── HandleTest.swift
│ │ │ │ ├── RepairTests.swift
│ │ │ │ ├── TokenizerTests.swift
│ │ │ │ └── TracerTests.swift
│ │ │ └── winq/
│ │ │ ├── identifier/
│ │ │ │ ├── BindParameterTests.swift
│ │ │ │ ├── ColumnConstraintTests.swift
│ │ │ │ ├── ColumnDefTests.swift
│ │ │ │ ├── ColumnTests.swift
│ │ │ │ ├── ColumnTypeTests.swift
│ │ │ │ ├── CommonTableExpressionTests.swift
│ │ │ │ ├── ExpressionTests.swift
│ │ │ │ ├── ForeignKeyTests.swift
│ │ │ │ ├── FrameSpecTests.swift
│ │ │ │ ├── IndexedColumnTests.swift
│ │ │ │ ├── JoinTests.swift
│ │ │ │ ├── LiteralValueTests.swift
│ │ │ │ ├── OrderingTermTests.swift
│ │ │ │ ├── QualifiedTableTests.swift
│ │ │ │ ├── RaiseFunctionTests.swift
│ │ │ │ ├── ResultColumnTests.swift
│ │ │ │ ├── SchemaTests.swift
│ │ │ │ ├── TableConstraintTests.swift
│ │ │ │ ├── TableOrSubqueryTests.swift
│ │ │ │ ├── UpsertTests.swift
│ │ │ │ └── WindowDefTests.swift
│ │ │ └── statement/
│ │ │ ├── StatementAlterTableTests.swift
│ │ │ ├── StatementAnalyzeTests.swift
│ │ │ ├── StatementAttachTests.swift
│ │ │ ├── StatementBeginTests.swift
│ │ │ ├── StatementCommitTests.swift
│ │ │ ├── StatementCreateIndexTests.swift
│ │ │ ├── StatementCreateTableTests.swift
│ │ │ ├── StatementCreateTriggerTests.swift
│ │ │ ├── StatementCreateViewTests.swift
│ │ │ ├── StatementCreateVirtualTableTests.swift
│ │ │ ├── StatementDeleteTests.swift
│ │ │ ├── StatementDetachTests.swift
│ │ │ ├── StatementDropIndexTests.swift
│ │ │ ├── StatementDropTableTests.swift
│ │ │ ├── StatementDropTriggerTests.swift
│ │ │ ├── StatementDropViewTests.swift
│ │ │ ├── StatementExplainTests.swift
│ │ │ ├── StatementInsertTests.swift
│ │ │ ├── StatementPragmaTests.swift
│ │ │ ├── StatementReindexTests.swift
│ │ │ ├── StatementReleaseTests.swift
│ │ │ ├── StatementRollbackTests.swift
│ │ │ ├── StatementSavepointTests.swift
│ │ │ ├── StatementSelectTests.swift
│ │ │ ├── StatementUpdateTests.swift
│ │ │ └── StatementVacuumTests.swift
│ │ ├── util/
│ │ │ ├── Convenience.swift
│ │ │ ├── Lock.swift
│ │ │ ├── Optional.swift
│ │ │ ├── Recyclable.swift
│ │ │ └── WCDBError.swift
│ │ └── winq/
│ │ ├── Convertible.swift
│ │ ├── Identifier.swift
│ │ ├── Statement.swift
│ │ ├── SyntaxConst.swift
│ │ ├── Value.swift
│ │ ├── identifier/
│ │ │ ├── BindParameter.swift
│ │ │ ├── Column.swift
│ │ │ ├── ColumnConstraint.swift
│ │ │ ├── ColumnDef.swift
│ │ │ ├── CommonTableExpression.swift
│ │ │ ├── Expression.swift
│ │ │ ├── ForeignKey.swift
│ │ │ ├── FrameSpec.swift
│ │ │ ├── IndexedColumn.swift
│ │ │ ├── Join.swift
│ │ │ ├── LiteralValue.swift
│ │ │ ├── Operable.swift
│ │ │ ├── OrderingTerm.swift
│ │ │ ├── Pragma.swift
│ │ │ ├── QualifiedTable.swift
│ │ │ ├── RaiseFunction.swift
│ │ │ ├── ResultColumn.swift
│ │ │ ├── Schema.swift
│ │ │ ├── TableConstraint.swift
│ │ │ ├── TableOrSubquery.swift
│ │ │ ├── Upsert.swift
│ │ │ └── WindowDef.swift
│ │ └── statement/
│ │ ├── StatementAlterTable.swift
│ │ ├── StatementAnalyze.swift
│ │ ├── StatementAttach.swift
│ │ ├── StatementBegin.swift
│ │ ├── StatementCommit.swift
│ │ ├── StatementCreateIndex.swift
│ │ ├── StatementCreateTable.swift
│ │ ├── StatementCreateTrigger.swift
│ │ ├── StatementCreateView.swift
│ │ ├── StatementCreateVirtualTable.swift
│ │ ├── StatementDelete.swift
│ │ ├── StatementDetach.swift
│ │ ├── StatementDropIndex.swift
│ │ ├── StatementDropTable.swift
│ │ ├── StatementDropTrigger.swift
│ │ ├── StatementDropView.swift
│ │ ├── StatementExplain.swift
│ │ ├── StatementInsert.swift
│ │ ├── StatementPragma.swift
│ │ ├── StatementReindex.swift
│ │ ├── StatementRelease.swift
│ │ ├── StatementRollback.swift
│ │ ├── StatementSavepoint.swift
│ │ ├── StatementSelect.swift
│ │ ├── StatementUpdate.swift
│ │ └── StatementVacuum.swift
│ ├── utility.cmake
│ ├── zstd.cmake
│ └── zstd.xcodeproj/
│ └── project.pbxproj
└── tools/
├── GetHeaderSearchPath.py
├── build-depends-android.sh
├── createHeaderLink.sh
├── dbbackup.c
├── dbrepair.c
├── docs/
│ ├── docs.sh
│ └── objc/
│ └── settings.plist
├── format/
│ ├── code.sh
│ └── main.sh
├── git/
│ ├── hook.sh
│ ├── pre-commit
│ └── prepare-commit-msg
├── patch/
│ └── openssl/
│ ├── 0001-Workaround-CPU-detection-on-x86-machines-using-libho.patch
│ ├── 0002-Clean-generated-asm-sources-on-clean-targets.patch
│ └── 0003-Fix-armv4-clang-build.patch
├── prebuild/
│ ├── openssl/
│ │ ├── android/
│ │ │ ├── arm64-v8a/
│ │ │ │ └── libcrypto.a
│ │ │ ├── armeabi-v7a/
│ │ │ │ └── libcrypto.a
│ │ │ ├── x86/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ └── libcrypto.a
│ │ ├── android_old/
│ │ │ ├── arm/
│ │ │ │ ├── include/
│ │ │ │ │ └── openssl/
│ │ │ │ │ ├── aes.h
│ │ │ │ │ ├── asn1.h
│ │ │ │ │ ├── asn1_mac.h
│ │ │ │ │ ├── asn1t.h
│ │ │ │ │ ├── bio.h
│ │ │ │ │ ├── blowfish.h
│ │ │ │ │ ├── bn.h
│ │ │ │ │ ├── buffer.h
│ │ │ │ │ ├── camellia.h
│ │ │ │ │ ├── cast.h
│ │ │ │ │ ├── cmac.h
│ │ │ │ │ ├── cms.h
│ │ │ │ │ ├── conf.h
│ │ │ │ │ ├── conf_api.h
│ │ │ │ │ ├── crypto.h
│ │ │ │ │ ├── des.h
│ │ │ │ │ ├── des_old.h
│ │ │ │ │ ├── dh.h
│ │ │ │ │ ├── dsa.h
│ │ │ │ │ ├── dso.h
│ │ │ │ │ ├── dtls1.h
│ │ │ │ │ ├── e_os2.h
│ │ │ │ │ ├── ebcdic.h
│ │ │ │ │ ├── ec.h
│ │ │ │ │ ├── ecdh.h
│ │ │ │ │ ├── ecdsa.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── evp.h
│ │ │ │ │ ├── hmac.h
│ │ │ │ │ ├── idea.h
│ │ │ │ │ ├── krb5_asn.h
│ │ │ │ │ ├── kssl.h
│ │ │ │ │ ├── lhash.h
│ │ │ │ │ ├── md4.h
│ │ │ │ │ ├── md5.h
│ │ │ │ │ ├── mdc2.h
│ │ │ │ │ ├── modes.h
│ │ │ │ │ ├── obj_mac.h
│ │ │ │ │ ├── objects.h
│ │ │ │ │ ├── ocsp.h
│ │ │ │ │ ├── opensslconf.h
│ │ │ │ │ ├── opensslv.h
│ │ │ │ │ ├── ossl_typ.h
│ │ │ │ │ ├── pem.h
│ │ │ │ │ ├── pem2.h
│ │ │ │ │ ├── pkcs12.h
│ │ │ │ │ ├── pkcs7.h
│ │ │ │ │ ├── pqueue.h
│ │ │ │ │ ├── rand.h
│ │ │ │ │ ├── rc2.h
│ │ │ │ │ ├── rc4.h
│ │ │ │ │ ├── ripemd.h
│ │ │ │ │ ├── rsa.h
│ │ │ │ │ ├── safestack.h
│ │ │ │ │ ├── seed.h
│ │ │ │ │ ├── sha.h
│ │ │ │ │ ├── srp.h
│ │ │ │ │ ├── srtp.h
│ │ │ │ │ ├── ssl.h
│ │ │ │ │ ├── ssl2.h
│ │ │ │ │ ├── ssl23.h
│ │ │ │ │ ├── ssl3.h
│ │ │ │ │ ├── stack.h
│ │ │ │ │ ├── symhacks.h
│ │ │ │ │ ├── tls1.h
│ │ │ │ │ ├── ts.h
│ │ │ │ │ ├── txt_db.h
│ │ │ │ │ ├── ui.h
│ │ │ │ │ ├── ui_compat.h
│ │ │ │ │ ├── whrlpool.h
│ │ │ │ │ ├── x509.h
│ │ │ │ │ ├── x509_vfy.h
│ │ │ │ │ └── x509v3.h
│ │ │ │ └── lib/
│ │ │ │ └── libcrypto.a
│ │ │ ├── arm64/
│ │ │ │ ├── include/
│ │ │ │ │ └── openssl/
│ │ │ │ │ ├── aes.h
│ │ │ │ │ ├── asn1.h
│ │ │ │ │ ├── asn1_mac.h
│ │ │ │ │ ├── asn1t.h
│ │ │ │ │ ├── bio.h
│ │ │ │ │ ├── blowfish.h
│ │ │ │ │ ├── bn.h
│ │ │ │ │ ├── buffer.h
│ │ │ │ │ ├── camellia.h
│ │ │ │ │ ├── cast.h
│ │ │ │ │ ├── cmac.h
│ │ │ │ │ ├── cms.h
│ │ │ │ │ ├── conf.h
│ │ │ │ │ ├── conf_api.h
│ │ │ │ │ ├── crypto.h
│ │ │ │ │ ├── des.h
│ │ │ │ │ ├── des_old.h
│ │ │ │ │ ├── dh.h
│ │ │ │ │ ├── dsa.h
│ │ │ │ │ ├── dso.h
│ │ │ │ │ ├── dtls1.h
│ │ │ │ │ ├── e_os2.h
│ │ │ │ │ ├── ebcdic.h
│ │ │ │ │ ├── ec.h
│ │ │ │ │ ├── ecdh.h
│ │ │ │ │ ├── ecdsa.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── evp.h
│ │ │ │ │ ├── hmac.h
│ │ │ │ │ ├── idea.h
│ │ │ │ │ ├── krb5_asn.h
│ │ │ │ │ ├── kssl.h
│ │ │ │ │ ├── lhash.h
│ │ │ │ │ ├── md4.h
│ │ │ │ │ ├── md5.h
│ │ │ │ │ ├── mdc2.h
│ │ │ │ │ ├── modes.h
│ │ │ │ │ ├── obj_mac.h
│ │ │ │ │ ├── objects.h
│ │ │ │ │ ├── ocsp.h
│ │ │ │ │ ├── opensslconf.h
│ │ │ │ │ ├── opensslv.h
│ │ │ │ │ ├── ossl_typ.h
│ │ │ │ │ ├── pem.h
│ │ │ │ │ ├── pem2.h
│ │ │ │ │ ├── pkcs12.h
│ │ │ │ │ ├── pkcs7.h
│ │ │ │ │ ├── pqueue.h
│ │ │ │ │ ├── rand.h
│ │ │ │ │ ├── rc2.h
│ │ │ │ │ ├── rc4.h
│ │ │ │ │ ├── ripemd.h
│ │ │ │ │ ├── rsa.h
│ │ │ │ │ ├── safestack.h
│ │ │ │ │ ├── seed.h
│ │ │ │ │ ├── sha.h
│ │ │ │ │ ├── srp.h
│ │ │ │ │ ├── srtp.h
│ │ │ │ │ ├── ssl.h
│ │ │ │ │ ├── ssl2.h
│ │ │ │ │ ├── ssl23.h
│ │ │ │ │ ├── ssl3.h
│ │ │ │ │ ├── stack.h
│ │ │ │ │ ├── symhacks.h
│ │ │ │ │ ├── tls1.h
│ │ │ │ │ ├── ts.h
│ │ │ │ │ ├── txt_db.h
│ │ │ │ │ ├── ui.h
│ │ │ │ │ ├── ui_compat.h
│ │ │ │ │ ├── whrlpool.h
│ │ │ │ │ ├── x509.h
│ │ │ │ │ ├── x509_vfy.h
│ │ │ │ │ └── x509v3.h
│ │ │ │ └── lib/
│ │ │ │ └── libcrypto.a
│ │ │ ├── x86/
│ │ │ │ ├── include/
│ │ │ │ │ └── openssl/
│ │ │ │ │ ├── aes.h
│ │ │ │ │ ├── asn1.h
│ │ │ │ │ ├── asn1_mac.h
│ │ │ │ │ ├── asn1t.h
│ │ │ │ │ ├── bio.h
│ │ │ │ │ ├── blowfish.h
│ │ │ │ │ ├── bn.h
│ │ │ │ │ ├── buffer.h
│ │ │ │ │ ├── camellia.h
│ │ │ │ │ ├── cast.h
│ │ │ │ │ ├── cmac.h
│ │ │ │ │ ├── cms.h
│ │ │ │ │ ├── conf.h
│ │ │ │ │ ├── conf_api.h
│ │ │ │ │ ├── crypto.h
│ │ │ │ │ ├── des.h
│ │ │ │ │ ├── des_old.h
│ │ │ │ │ ├── dh.h
│ │ │ │ │ ├── dsa.h
│ │ │ │ │ ├── dso.h
│ │ │ │ │ ├── dtls1.h
│ │ │ │ │ ├── e_os2.h
│ │ │ │ │ ├── ebcdic.h
│ │ │ │ │ ├── ec.h
│ │ │ │ │ ├── ecdh.h
│ │ │ │ │ ├── ecdsa.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── evp.h
│ │ │ │ │ ├── hmac.h
│ │ │ │ │ ├── idea.h
│ │ │ │ │ ├── krb5_asn.h
│ │ │ │ │ ├── kssl.h
│ │ │ │ │ ├── lhash.h
│ │ │ │ │ ├── md4.h
│ │ │ │ │ ├── md5.h
│ │ │ │ │ ├── mdc2.h
│ │ │ │ │ ├── modes.h
│ │ │ │ │ ├── obj_mac.h
│ │ │ │ │ ├── objects.h
│ │ │ │ │ ├── ocsp.h
│ │ │ │ │ ├── opensslconf.h
│ │ │ │ │ ├── opensslv.h
│ │ │ │ │ ├── ossl_typ.h
│ │ │ │ │ ├── pem.h
│ │ │ │ │ ├── pem2.h
│ │ │ │ │ ├── pkcs12.h
│ │ │ │ │ ├── pkcs7.h
│ │ │ │ │ ├── pqueue.h
│ │ │ │ │ ├── rand.h
│ │ │ │ │ ├── rc4.h
│ │ │ │ │ ├── ripemd.h
│ │ │ │ │ ├── rsa.h
│ │ │ │ │ ├── safestack.h
│ │ │ │ │ ├── seed.h
│ │ │ │ │ ├── sha.h
│ │ │ │ │ ├── srp.h
│ │ │ │ │ ├── srtp.h
│ │ │ │ │ ├── ssl.h
│ │ │ │ │ ├── ssl2.h
│ │ │ │ │ ├── ssl23.h
│ │ │ │ │ ├── ssl3.h
│ │ │ │ │ ├── stack.h
│ │ │ │ │ ├── symhacks.h
│ │ │ │ │ ├── tls1.h
│ │ │ │ │ ├── ts.h
│ │ │ │ │ ├── txt_db.h
│ │ │ │ │ ├── ui.h
│ │ │ │ │ ├── ui_compat.h
│ │ │ │ │ ├── whrlpool.h
│ │ │ │ │ ├── x509.h
│ │ │ │ │ ├── x509_vfy.h
│ │ │ │ │ └── x509v3.h
│ │ │ │ └── lib/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ ├── include/
│ │ │ │ └── openssl/
│ │ │ │ ├── aes.h
│ │ │ │ ├── asn1.h
│ │ │ │ ├── asn1_mac.h
│ │ │ │ ├── asn1t.h
│ │ │ │ ├── bio.h
│ │ │ │ ├── blowfish.h
│ │ │ │ ├── bn.h
│ │ │ │ ├── buffer.h
│ │ │ │ ├── camellia.h
│ │ │ │ ├── cmac.h
│ │ │ │ ├── cms.h
│ │ │ │ ├── conf.h
│ │ │ │ ├── conf_api.h
│ │ │ │ ├── crypto.h
│ │ │ │ ├── des.h
│ │ │ │ ├── des_old.h
│ │ │ │ ├── dso.h
│ │ │ │ ├── e_os2.h
│ │ │ │ ├── ebcdic.h
│ │ │ │ ├── err.h
│ │ │ │ ├── evp.h
│ │ │ │ ├── hmac.h
│ │ │ │ ├── idea.h
│ │ │ │ ├── krb5_asn.h
│ │ │ │ ├── lhash.h
│ │ │ │ ├── modes.h
│ │ │ │ ├── obj_mac.h
│ │ │ │ ├── objects.h
│ │ │ │ ├── ocsp.h
│ │ │ │ ├── opensslconf.h
│ │ │ │ ├── opensslv.h
│ │ │ │ ├── ossl_typ.h
│ │ │ │ ├── pem.h
│ │ │ │ ├── pem2.h
│ │ │ │ ├── pkcs12.h
│ │ │ │ ├── pkcs7.h
│ │ │ │ ├── pqueue.h
│ │ │ │ ├── rand.h
│ │ │ │ ├── rc4.h
│ │ │ │ ├── safestack.h
│ │ │ │ ├── seed.h
│ │ │ │ ├── sha.h
│ │ │ │ ├── srp.h
│ │ │ │ ├── stack.h
│ │ │ │ ├── symhacks.h
│ │ │ │ ├── ts.h
│ │ │ │ ├── txt_db.h
│ │ │ │ ├── ui.h
│ │ │ │ ├── ui_compat.h
│ │ │ │ ├── whrlpool.h
│ │ │ │ ├── x509.h
│ │ │ │ ├── x509_vfy.h
│ │ │ │ └── x509v3.h
│ │ │ └── lib/
│ │ │ └── libcrypto.a
│ │ ├── include/
│ │ │ └── openssl/
│ │ │ ├── aes.h
│ │ │ ├── asn1.h
│ │ │ ├── asn1_mac.h
│ │ │ ├── asn1err.h
│ │ │ ├── asn1t.h
│ │ │ ├── async.h
│ │ │ ├── asyncerr.h
│ │ │ ├── bio.h
│ │ │ ├── bioerr.h
│ │ │ ├── blowfish.h
│ │ │ ├── bn.h
│ │ │ ├── bnerr.h
│ │ │ ├── buffer.h
│ │ │ ├── buffererr.h
│ │ │ ├── camellia.h
│ │ │ ├── cast.h
│ │ │ ├── cmac.h
│ │ │ ├── cms.h
│ │ │ ├── cmserr.h
│ │ │ ├── comp.h
│ │ │ ├── comperr.h
│ │ │ ├── conf.h
│ │ │ ├── conf_api.h
│ │ │ ├── conferr.h
│ │ │ ├── crypto.h
│ │ │ ├── cryptoerr.h
│ │ │ ├── ct.h
│ │ │ ├── cterr.h
│ │ │ ├── des.h
│ │ │ ├── dh.h
│ │ │ ├── dherr.h
│ │ │ ├── dsa.h
│ │ │ ├── dsaerr.h
│ │ │ ├── dtls1.h
│ │ │ ├── e_os2.h
│ │ │ ├── ebcdic.h
│ │ │ ├── ec.h
│ │ │ ├── ecdh.h
│ │ │ ├── ecdsa.h
│ │ │ ├── ecerr.h
│ │ │ ├── engine.h
│ │ │ ├── engineerr.h
│ │ │ ├── err.h
│ │ │ ├── evp.h
│ │ │ ├── evperr.h
│ │ │ ├── hmac.h
│ │ │ ├── idea.h
│ │ │ ├── kdf.h
│ │ │ ├── kdferr.h
│ │ │ ├── lhash.h
│ │ │ ├── md2.h
│ │ │ ├── md4.h
│ │ │ ├── md5.h
│ │ │ ├── mdc2.h
│ │ │ ├── modes.h
│ │ │ ├── obj_mac.h
│ │ │ ├── objects.h
│ │ │ ├── objectserr.h
│ │ │ ├── ocsp.h
│ │ │ ├── ocsperr.h
│ │ │ ├── opensslconf-android.h
│ │ │ ├── opensslconf-apple.h
│ │ │ ├── opensslconf-windows.h
│ │ │ ├── opensslconf.h
│ │ │ ├── opensslconf_android-arm.h
│ │ │ ├── opensslconf_android-arm64.h
│ │ │ ├── opensslconf_android-x86_64.h
│ │ │ ├── opensslconf_android64-x86_64.h
│ │ │ ├── opensslconf_catalyst_arm64.h
│ │ │ ├── opensslconf_catalyst_x86_64.h
│ │ │ ├── opensslconf_default.h
│ │ │ ├── opensslconf_ios_arm64.h
│ │ │ ├── opensslconf_ios_sim_x86_64.h
│ │ │ ├── opensslconf_macos_arm64.h
│ │ │ ├── opensslconf_macos_x86_64.h
│ │ │ ├── opensslconf_watchos_arm64_32.h
│ │ │ ├── opensslconf_watchos_armv7k.h
│ │ │ ├── opensslconf_watchos_sim_i386.h
│ │ │ ├── opensslconf_watchos_sim_x86_64.h
│ │ │ ├── opensslconf_windows-x86.h
│ │ │ ├── opensslconf_windows-x86_64.h
│ │ │ ├── opensslv.h
│ │ │ ├── ossl_typ.h
│ │ │ ├── pem.h
│ │ │ ├── pem2.h
│ │ │ ├── pemerr.h
│ │ │ ├── pkcs12.h
│ │ │ ├── pkcs12err.h
│ │ │ ├── pkcs7.h
│ │ │ ├── pkcs7err.h
│ │ │ ├── rand.h
│ │ │ ├── rand_drbg.h
│ │ │ ├── randerr.h
│ │ │ ├── rc2.h
│ │ │ ├── rc4.h
│ │ │ ├── rc5.h
│ │ │ ├── ripemd.h
│ │ │ ├── rsa.h
│ │ │ ├── rsaerr.h
│ │ │ ├── safestack.h
│ │ │ ├── seed.h
│ │ │ ├── sha.h
│ │ │ ├── srp.h
│ │ │ ├── srtp.h
│ │ │ ├── ssl.h
│ │ │ ├── ssl2.h
│ │ │ ├── ssl3.h
│ │ │ ├── sslerr.h
│ │ │ ├── stack.h
│ │ │ ├── store.h
│ │ │ ├── storeerr.h
│ │ │ ├── symhacks.h
│ │ │ ├── tls1.h
│ │ │ ├── ts.h
│ │ │ ├── tserr.h
│ │ │ ├── txt_db.h
│ │ │ ├── ui.h
│ │ │ ├── uierr.h
│ │ │ ├── whrlpool.h
│ │ │ ├── x509.h
│ │ │ ├── x509_vfy.h
│ │ │ ├── x509err.h
│ │ │ ├── x509v3.h
│ │ │ └── x509v3err.h
│ │ ├── linux/
│ │ │ ├── arm64/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ └── libcrypto.a
│ │ ├── ohos/
│ │ │ ├── arm64-v8a/
│ │ │ │ └── libcrypto.a
│ │ │ └── x86_64/
│ │ │ └── libcrypto.a
│ │ └── windows/
│ │ ├── win32/
│ │ │ ├── libcrypto.lib
│ │ │ ├── libssl.lib
│ │ │ └── ossl_static.pdb
│ │ └── win64/
│ │ ├── libcrypto.lib
│ │ ├── libssl.lib
│ │ └── ossl_static.pdb
│ └── zlib/
│ ├── include/
│ │ ├── zconf.h
│ │ └── zlib.h
│ ├── linux/
│ │ ├── arm64/
│ │ │ └── libz.a
│ │ └── x86_64/
│ │ └── libz.a
│ └── windows/
│ ├── win32/
│ │ └── zlibstatic.lib
│ └── win64/
│ └── zlibstatic.lib
├── templates/
│ ├── .swiftlint.yml
│ ├── archive/
│ │ └── archive.sh
│ ├── codesnippets/
│ │ ├── WCDB.ColumnCodableClass.Data.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.Double.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.Int32.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.Int64.swift.codesnippet
│ │ ├── WCDB.ColumnCodableClass.String.swift.codesnippet
│ │ └── WCDB.TableCodableClass.swift.codesnippet
│ ├── install.sh
│ └── xctemplates/
│ └── WCDB/
│ ├── ColumnCodable.xctemplate/
│ │ ├── Objective-CData/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CDouble/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CInteger32/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CInteger64/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── Objective-CString/
│ │ │ ├── ___FILEBASENAME___+WCTColumnCoding.h
│ │ │ └── ___FILEBASENAME___+WCTColumnCoding.mm
│ │ ├── SwiftData/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftDouble/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftInteger32/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftInteger64/
│ │ │ └── ___FILEBASENAME___.swift
│ │ ├── SwiftString/
│ │ │ └── ___FILEBASENAME___.swift
│ │ └── TemplateInfo.plist
│ ├── TableCodable.xctemplate/
│ │ ├── Objective-C/
│ │ │ ├── ___FILEBASENAME___+WCTTableCoding.h
│ │ │ ├── ___FILEBASENAME___.h
│ │ │ └── ___FILEBASENAME___.mm
│ │ ├── Swift/
│ │ │ └── ___FILEBASENAME___.swift
│ │ └── TemplateInfo.plist
│ └── Tokenizer.xctemplate/
│ ├── Objective-C/
│ │ ├── ___FILEBASENAME___Tokenizer.h
│ │ └── ___FILEBASENAME___Tokenizer.mm
│ ├── Swift/
│ │ └── ___FILEBASENAME___.swift
│ └── TemplateInfo.plist
└── version/
├── build.sh
├── build_xcframework.sh
├── bump.sh
└── settings.sh
Showing preview only (1,490K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (17254 symbols across 1560 files)
FILE: deprecated/android/addons/backup/mm_backup.c
type mm_backup_ctx (line 36) | struct mm_backup_ctx {
function dump_write_stream (line 141) | static int dump_write_stream(mm_backup_ctx *ctx, const void *data, uint_...
function dump_write_end (line 176) | static int dump_write_end(mm_backup_ctx *ctx)
function dump_write_varint (line 236) | static int dump_write_varint(mm_backup_ctx *ctx, int64_t val)
function dump_write_blob (line 260) | static int
function dump_rows (line 293) | static int dump_rows(mm_backup_ctx *ctx,
function compar_table_tabdesc (line 444) | static int compar_table_tabdesc(const void *key, const void *value)
function dump_callback (line 450) | static int
function run_schema_dump_query (line 529) | static int run_schema_dump_query(mm_backup_ctx *ctx, const char *query_sql)
function mm_backup_ctx (line 572) | mm_backup_ctx *mm_backup_init(const unsigned char *key,
function compar_tabdesc (line 664) | static int compar_tabdesc(const void *a, const void *b)
function mm_backup_run (line 670) | int mm_backup_run(mm_backup_ctx *ctx,
function mm_backup_cancel (line 783) | void mm_backup_cancel(mm_backup_ctx *ctx)
function mm_backup_finish (line 790) | void mm_backup_finish(mm_backup_ctx *ctx)
function mm_backup_statistics (line 808) | void mm_backup_statistics(mm_backup_ctx *ctx, unsigned int *stmt_count)
FILE: deprecated/android/addons/backup/mm_backup.h
type mm_backup_ctx (line 45) | typedef struct mm_backup_ctx mm_backup_ctx;
type mm_recover_ctx (line 46) | typedef struct mm_recover_ctx mm_recover_ctx;
type mm_backup_tabdesc (line 50) | typedef struct mm_backup_tabdesc {
type mm_backup_header (line 101) | typedef struct mm_backup_header {
type mm_backup_section (line 106) | typedef struct mm_backup_section {
FILE: deprecated/android/addons/backup/mm_recover.c
type mm_recover_ctx (line 31) | struct mm_recover_ctx {
function read_header (line 74) | static int read_header(mm_recover_ctx *ctx)
function dump_read_stream (line 95) | static int dump_read_stream(mm_recover_ctx *ctx, void *buf, uint_t size)
function dump_read_varint (line 136) | static int dump_read_varint(mm_recover_ctx *ctx, int64_t *val, int minus)
function dump_read_and_run_tag (line 180) | static int dump_read_and_run_tag(mm_recover_ctx *ctx, int fatal)
function mm_recover_ctx (line 483) | mm_recover_ctx *mm_recover_init(const char *in_path,
function mm_recover_run (line 526) | int mm_recover_run(mm_recover_ctx *ctx, sqlite3 *db, int fatal)
function mm_recover_cancel (line 583) | void mm_recover_cancel(mm_recover_ctx *ctx)
function mm_recover_finish (line 588) | void mm_recover_finish(mm_recover_ctx *ctx)
function mm_recover_statistics (line 596) | void mm_recover_statistics(mm_recover_ctx *ctx,
function mm_print_log (line 611) | void mm_print_log(mm_logfunc logfunc, int prio, const char *fmt, ...)
function mm_print_err (line 623) | void mm_print_err(mm_logfunc logfunc, char *errmsg, const char *fmt, ...)
function dummy_log (line 635) | void dummy_log(int prio, const char *msg)
FILE: deprecated/android/addons/fts/fts3_tokenizer.h
type sqlite3_tokenizer_module (line 48) | typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
type sqlite3_tokenizer (line 49) | typedef struct sqlite3_tokenizer sqlite3_tokenizer;
type sqlite3_tokenizer_cursor (line 50) | typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
type sqlite3_tokenizer_module (line 52) | struct sqlite3_tokenizer_module {
type sqlite3_tokenizer (line 138) | struct sqlite3_tokenizer {
type sqlite3_tokenizer_cursor (line 143) | struct sqlite3_tokenizer_cursor {
FILE: deprecated/android/addons/fts/mm_cipher.c
type mm_cipher_context_t (line 28) | typedef struct mm_cipher_context_t {
function do_rc4 (line 35) | static void do_rc4(mm_cipher_context_t *ctx, void *buf, int buf_len)
function mmenc_func (line 44) | static void mmenc_func(sqlite3_context *db, int argc, sqlite3_value **argv)
function mmdec_func (line 112) | static void mmdec_func(sqlite3_context *db, int argc, sqlite3_value **argv)
function mm_cipher_key_func (line 187) | static void
function mm_func_destroy (line 211) | static void mm_func_destroy(void *ptr)
function sqlite3_register_mm_cipher (line 220) | int sqlite3_register_mm_cipher(sqlite3 *db, const unsigned char *key)
function sqlite3_mm_set_cipher_key (line 269) | int sqlite3_mm_set_cipher_key(sqlite3 *db, const void *key, int key_len)
FILE: deprecated/android/addons/fts/mm_sqliteext.c
function sqlite3_mmftsext_init (line 32) | __declspec(dllexport)
FILE: deprecated/android/addons/fts/mm_tokenizer.c
type mm_tokenizer_t (line 39) | typedef struct mm_tokenizer_t {
type mm_cursor_t (line 44) | typedef struct mm_cursor_t {
function output_token (line 81) | static int output_token(mm_cursor_t *cur,
function find_splited_ideo_token (line 165) | static int
function mmtok_create (line 192) | static int
function mmtok_destroy (line 209) | static int mmtok_destroy(sqlite3_tokenizer *pTokenizer)
function mmtok_open (line 216) | static int mmtok_open(sqlite3_tokenizer *pTokenizer,
function mmtok_close (line 291) | static int mmtok_close(sqlite3_tokenizer_cursor *pCursor)
function mmtok_next (line 301) | static int
function sqlite3_register_mm_tokenizer (line 374) | int sqlite3_register_mm_tokenizer(sqlite3 *db)
FILE: deprecated/android/addons/fts/mm_utils.c
function sqlite3_mm_set_last_error (line 28) | void sqlite3_mm_set_last_error(const char *fmt, ...)
function sqlite3_mm_clear_error (line 39) | void sqlite3_mm_clear_error()
function mm_last_error (line 44) | static void mm_last_error(sqlite3_context *db, int argc, sqlite3_value *...
function sqlite3_register_mm_utils (line 49) | int sqlite3_register_mm_utils(sqlite3 *db)
FILE: deprecated/android/addons/icucompat/icucompat.c
function load_functions (line 45) | static void load_functions(const char *suffix)
type dirent (line 68) | struct dirent
function init_icucompat (line 97) | int init_icucompat()
function destroy_icucompat (line 124) | void destroy_icucompat()
FILE: deprecated/android/addons/icucompat/icucompat.h
type icu_compat_t (line 40) | typedef struct icu_compat_t {
FILE: deprecated/android/addons/icucompat/unicode/alphaindex.h
type UAlphabeticIndexLabelType (line 33) | enum UAlphabeticIndexLabelType {
type UHashtable (line 67) | struct UHashtable
FILE: deprecated/android/addons/icucompat/unicode/bms.h
type UCD (line 39) | typedef void UCD;
type BMS (line 186) | struct BMS
type BMS (line 187) | typedef struct BMS BMS;
FILE: deprecated/android/addons/icucompat/unicode/brkiter.h
function U_COMMON_API (line 100) | U_COMMON_API BreakIterator : public UObject {
function UBool (line 579) | inline UBool BreakIterator::isBufferClone()
FILE: deprecated/android/addons/icucompat/unicode/bytestream.h
function U_COMMON_API (line 48) | U_COMMON_API ByteSink : public UMemory {
function virtual (line 245) | virtual void Append(const char* data, int32_t n) { dest_->append(data, n...
FILE: deprecated/android/addons/icucompat/unicode/bytestrie.h
function class (line 100) | class State : public UMemory {
function UStringTrieResult (line 163) | inline UStringTrieResult first(int32_t inByte) {
function getValue (line 206) | inline int32_t getValue() const {
function stop (line 359) | inline void stop() {
function UStringTrieResult (line 401) | static inline UStringTrieResult valueResult(int32_t node) {
FILE: deprecated/android/addons/icucompat/unicode/bytestriebuilder.h
function virtual (line 134) | virtual int32_t getMaxBranchLinearSubNodeLength() const { return BytesTr...
function class (line 142) | class BTLinearMatchNode : public LinearMatchNode {
FILE: deprecated/android/addons/icucompat/unicode/calendar.h
type EDateFields (line 209) | enum EDateFields {
type EDaysOfWeek (line 253) | enum EDaysOfWeek {
type EMonths (line 267) | enum EMonths {
type EAmpm (line 287) | enum EAmpm {
function UDate (line 441) | inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(...
function setTime (line 453) | inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(da...
function UBool (line 476) | UBool operator!=(const Calendar& that) const {return !operator==(that);}
function internalGet (line 1546) | inline int32_t internalGet(EDateFields field) const {return fFields[fiel...
function internalGet (line 1560) | inline int32_t internalGet(UCalendarDateFields field, int32_t defaultVal...
function internalGet (line 1570) | inline int32_t internalGet(UCalendarDateFields field) const {return fFie...
type ELimitType (line 1609) | enum ELimitType {
function UDate (line 1887) | UDate internalGetTime(void) const { return fTime; }
function internalSetTime (line 1896) | void internalSetTime(UDate time) { fTime = time; }
function virtual (line 2393) | virtual UBool haveDefaultCentury() const = 0;
function roll (line 2443) | inline void
function roll (line 2450) | inline void
function internalSet (line 2465) | inline void
function weekNumber (line 2475) | inline int32_t Calendar::weekNumber(int32_t dayOfPeriod, int32_t dayOfW...
FILE: deprecated/android/addons/icucompat/unicode/chariter.h
type EOrigin (line 362) | enum EOrigin { kStart, kCurrent, kEnd }
function UBool (line 686) | inline UBool
function setToStart (line 691) | inline int32_t
function setToEnd (line 696) | inline int32_t
function startIndex (line 701) | inline int32_t
function endIndex (line 706) | inline int32_t
function getIndex (line 711) | inline int32_t
function getLength (line 716) | inline int32_t
FILE: deprecated/android/addons/icucompat/unicode/choicfmt.h
function UnicodeString (line 662) | inline UnicodeString&
function UnicodeString (line 671) | inline UnicodeString&
function UnicodeString (line 677) | inline UnicodeString&
FILE: deprecated/android/addons/icucompat/unicode/coleitr.h
type UCollationElements (line 49) | typedef struct UCollationElements UCollationElements;
function virtual (line 281) | virtual UClassID getDynamicClassID() const;
function getMaxExpansion (line 386) | inline int32_t CollationElementIterator::getMaxExpansion(int32_t order) ...
function UBool (line 391) | inline UBool CollationElementIterator::isIgnorable(int32_t order)
FILE: deprecated/android/addons/icucompat/unicode/coll.h
type ECollationStrength (line 207) | enum ECollationStrength
type EComparisonResult (line 226) | enum EComparisonResult
FILE: deprecated/android/addons/icucompat/unicode/curramt.h
function virtual (line 96) | virtual UClassID getDynamicClassID() const;
function UChar (line 123) | inline const UChar* CurrencyAmount::getISOCurrency() const {
FILE: deprecated/android/addons/icucompat/unicode/currpinf.h
function virtual (line 183) | virtual UClassID getDynamicClassID() const;
FILE: deprecated/android/addons/icucompat/unicode/currunit.h
function virtual (line 87) | virtual UClassID getDynamicClassID() const;
FILE: deprecated/android/addons/icucompat/unicode/datefmt.h
type EStyle (line 148) | enum EStyle
type EField (line 734) | enum EField
function UnicodeString (line 784) | inline UnicodeString&
FILE: deprecated/android/addons/icucompat/unicode/dbbi.h
type RuleBasedBreakIterator (line 33) | typedef RuleBasedBreakIterator DictionaryBasedBreakIterator;
FILE: deprecated/android/addons/icucompat/unicode/dcfmtsym.h
function U_I18N_API (line 84) | U_I18N_API DecimalFormatSymbols : public UObject {
function UnicodeString (line 412) | inline const UnicodeString &
function UChar (line 454) | inline const UChar*
FILE: deprecated/android/addons/icucompat/unicode/decimfmt.h
type ERoundingMode (line 666) | enum ERoundingMode {
type EPadPosition (line 688) | enum EPadPosition {
function precision (line 1962) | int32_t precision() const;
function UnicodeString (line 2436) | inline UnicodeString&
function UnicodeString (line 2443) | inline UnicodeString&
function UnicodeString (line 2451) | inline const UnicodeString &
FILE: deprecated/android/addons/icucompat/unicode/dtfmtsym.h
function UBool (line 181) | UBool operator!=(const DateFormatSymbols& other) const { return !operato...
type DtContextType (line 272) | enum DtContextType {
type DtWidthType (line 282) | enum DtWidthType {
type EMonthPatternType (line 411) | enum EMonthPatternType
type ECapitalizationContextUsageType (line 502) | enum ECapitalizationContextUsageType
FILE: deprecated/android/addons/icucompat/unicode/dtintrv.h
function U_COMMON_API (line 32) | U_COMMON_API DateInterval : public UObject {
function UBool (line 150) | inline UBool
FILE: deprecated/android/addons/icucompat/unicode/dtitvfmt.h
function U_I18N_API (line 218) | U_I18N_API DateIntervalFormat : public Format {
function UBool (line 982) | inline UBool
FILE: deprecated/android/addons/icucompat/unicode/dtitvinf.h
type IntervalPatternIndex (line 347) | enum IntervalPatternIndex
FILE: deprecated/android/addons/icucompat/unicode/dtrule.h
function U_I18N_API (line 29) | U_I18N_API DateTimeRule : public UObject {
FILE: deprecated/android/addons/icucompat/unicode/enumset.h
function add (line 36) | inline void add(T toAdd) { set(toAdd, 1); }
function remove (line 37) | inline void remove(T toRemove) { set(toRemove, 0); }
function contains (line 38) | inline int32_t contains(T toCheck) const { return get(toCheck); }
function set (line 39) | inline void set(T toSet, int32_t v) { fBools=(fBools&(~flag(toSet)))|(v?...
function get (line 40) | inline int32_t get(T toCheck) const { return (fBools & flag(toCheck))?1:...
function UBool (line 41) | inline UBool isValidEnum(T toCheck) const { return (toCheck>=minValue&&...
function UBool (line 42) | inline UBool isValidValue(int32_t v) const { return (v==0||v==1); }
FILE: deprecated/android/addons/icucompat/unicode/errorcode.h
function U_COMMON_API (line 79) | U_COMMON_API ErrorCode: public UMemory {
FILE: deprecated/android/addons/icucompat/unicode/fieldpos.h
function getField (line 190) | int32_t getField(void) const { return fField; }
function getBeginIndex (line 197) | int32_t getBeginIndex(void) const { return fBeginIndex; }
function getEndIndex (line 206) | int32_t getEndIndex(void) const { return fEndIndex; }
function setField (line 213) | void setField(int32_t f) { fField = f; }
function setBeginIndex (line 220) | void setBeginIndex(int32_t bi) { fBeginIndex = bi; }
function setEndIndex (line 227) | void setEndIndex(int32_t ei) { fEndIndex = ei; }
function virtual (line 234) | virtual UClassID getDynamicClassID() const;
function UBool (line 272) | inline UBool
function UBool (line 280) | inline UBool
FILE: deprecated/android/addons/icucompat/unicode/fmtable.h
type ISDATE (line 73) | enum ISDATE { kIsDate }
function UBool (line 191) | UBool operator!=(const Formattable& other) const
type Type (line 219) | enum Type {
function getLong (line 313) | int32_t getLong(void) const { return (int32_t)fValue.fInt64; }
function getInt64 (line 339) | int64_t getInt64(void) const { return fValue.fInt64; }
function Formattable (line 441) | const Formattable* getArray(int32_t& count) const
function virtual (line 588) | virtual UClassID getDynamicClassID() const;
function UDate (line 668) | inline UDate Formattable::getDate(UErrorCode& status) const {
function UnicodeString (line 678) | inline const UnicodeString& Formattable::getString(void) const {
function UnicodeString (line 682) | inline UnicodeString& Formattable::getString(void) {
function getLong (line 687) | inline int32_t Formattable::getLong(UErrorCode* status) const {
FILE: deprecated/android/addons/icucompat/unicode/format.h
function U_I18N_API (line 94) | U_I18N_API Format : public UObject {
FILE: deprecated/android/addons/icucompat/unicode/fpositer.h
function UBool (line 90) | UBool operator!=(const FieldPositionIterator& rhs) const { return !opera...
FILE: deprecated/android/addons/icucompat/unicode/gregocal.h
type EEras (line 156) | enum EEras {
FILE: deprecated/android/addons/icucompat/unicode/icuplug.h
type UPlugData (line 121) | struct UPlugData
type UPlugData (line 122) | typedef struct UPlugData UPlugData;
type UPlugTokenReturn (line 146) | typedef uint32_t UPlugTokenReturn;
type UPlugReason (line 152) | typedef enum {
type UPlugLevel (line 167) | typedef enum {
FILE: deprecated/android/addons/icucompat/unicode/idna.h
function reset (line 311) | void reset() {
FILE: deprecated/android/addons/icucompat/unicode/listformatter.h
function UMemory (line 30) | struct ListFormatData : public UMemory {
FILE: deprecated/android/addons/icucompat/unicode/localpointer.h
function U_NAMESPACE_BEGIN (line 43) | U_NAMESPACE_BEGIN
function adoptInstead (line 207) | void adoptInstead(T *p) {
function adoptInstead (line 253) | void adoptInstead(T *p) {
FILE: deprecated/android/addons/icucompat/unicode/locdspnm.h
function virtual (line 87) | virtual const Locale& getLocale() const = 0;
FILE: deprecated/android/addons/icucompat/unicode/locid.h
function U_COMMON_API (line 182) | U_COMMON_API Locale : public UObject {
function UBool (line 745) | inline UBool
function UBool (line 782) | inline UBool
FILE: deprecated/android/addons/icucompat/unicode/measfmt.h
function U_I18N_API (line 41) | U_I18N_API MeasureFormat : public Format {
FILE: deprecated/android/addons/icucompat/unicode/measunit.h
function U_I18N_API (line 36) | U_I18N_API MeasureUnit: public UObject {
FILE: deprecated/android/addons/icucompat/unicode/measure.h
function Formattable (line 98) | inline const Formattable& getNumber() const;
FILE: deprecated/android/addons/icucompat/unicode/messagepattern.h
type UMessagePatternApostropheMode (line 66) | enum UMessagePatternApostropheMode {
type UMessagePatternApostropheMode (line 92) | typedef enum UMessagePatternApostropheMode UMessagePatternApostropheMode;
type UMessagePatternPartType (line 98) | enum UMessagePatternPartType {
type UMessagePatternPartType (line 207) | typedef enum UMessagePatternPartType UMessagePatternPartType;
type UMessagePatternArgType (line 217) | enum UMessagePatternArgType {
type UMessagePatternArgType (line 260) | typedef enum UMessagePatternArgType UMessagePatternArgType;
function clearPatternAndSetApostropheMode (line 514) | void clearPatternAndSetApostropheMode(UMessagePatternApostropheMode mode) {
function UBool (line 531) | inline UBool operator!=(const MessagePattern &other) const {
function hashCode (line 539) | int32_t hashCode() const;
function UnicodeString (line 601) | UnicodeString autoQuoteApostropheDeep() const;
function Part (line 621) | const Part &getPart(int32_t i) const {
function UMessagePatternPartType (line 632) | UMessagePatternPartType getPartType(int32_t i) const {
function getPatternIndex (line 643) | int32_t getPatternIndex(int32_t partIndex) const {
function UnicodeString (line 654) | UnicodeString getSubstring(const Part &part) const {
function UBool (line 665) | UBool partSubstringMatches(const Part &part, const UnicodeString &s) con...
function getLimitPartIndex (line 693) | int32_t getLimitPartIndex(int32_t start) const {
function class (line 708) | class Part : public UMemory {
function UBool (line 786) | static UBool hasNumericValue(UMessagePatternPartType type) {
function UBool (line 802) | inline UBool operator!=(const Part &other) const {
function parseArgNumber (line 859) | int32_t parseArgNumber(int32_t start, int32_t limit) {
FILE: deprecated/android/addons/icucompat/unicode/msgfmt.h
type UHashtable (line 39) | typedef struct UHashtable UHashtable;
type EFormatNumber (line 331) | enum EFormatNumber {
function Formattable (line 1057) | const Formattable::Type* getArgTypeList(int32_t& listCount) const {
function virtual (line 1090) | virtual UClassID getDynamicClassID() const;
FILE: deprecated/android/addons/icucompat/unicode/normalizer2.h
function U_COMMON_API (line 78) | U_COMMON_API Normalizer2 : public UObject {
FILE: deprecated/android/addons/icucompat/unicode/normlzr.h
function U_COMMON_API (line 130) | U_COMMON_API Normalizer : public UObject {
function UBool (line 764) | inline UBool
function UNormalizationCheckResult (line 768) | inline UNormalizationCheckResult
function UBool (line 775) | inline UBool
function compare (line 782) | inline int32_t
FILE: deprecated/android/addons/icucompat/unicode/numfmt.h
type EAlignmentFields (line 183) | enum EAlignmentFields {
function UnicodeString (line 1115) | inline UnicodeString&
FILE: deprecated/android/addons/icucompat/unicode/parseerr.h
type UParseError (line 56) | typedef struct UParseError {
FILE: deprecated/android/addons/icucompat/unicode/parsepos.h
function U_COMMON_API (line 47) | U_COMMON_API ParsePosition : public UObject {
function UBool (line 190) | inline UBool
function UBool (line 199) | inline UBool
function setIndex (line 211) | inline void
function setErrorIndex (line 223) | inline void
FILE: deprecated/android/addons/icucompat/unicode/plurrule.h
function UBool (line 350) | UBool operator!=(const PluralRules& other) const {return !operator==(ot...
FILE: deprecated/android/addons/icucompat/unicode/rbbi.h
type UTrie (line 33) | struct UTrie
type RBBIStateTable (line 45) | struct RBBIStateTable
type EDontAdopt (line 182) | enum EDontAdopt {
function UBool (line 773) | inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& tha...
FILE: deprecated/android/addons/icucompat/unicode/rbnf.h
type URBNFRuleSetTag (line 48) | enum URBNFRuleSetTag {
function virtual (line 662) | virtual UnicodeString getRules() const;
function UnicodeString (line 1040) | inline UnicodeString&
function UnicodeString (line 1046) | inline UnicodeString&
function parse (line 1052) | inline void
function UBool (line 1060) | inline UBool
function NFRuleSet (line 1067) | inline NFRuleSet*
FILE: deprecated/android/addons/icucompat/unicode/rbtz.h
type Transition (line 26) | struct Transition
FILE: deprecated/android/addons/icucompat/unicode/regex.h
type REStackFrame (line 64) | struct REStackFrame
function UBool (line 141) | inline UBool operator!=(const RegexPattern& that) const {return ! ope...
function virtual (line 547) | virtual UClassID getDynamicClassID() const;
FILE: deprecated/android/addons/icucompat/unicode/rep.h
function virtual (line 225) | virtual int32_t getLength() const = 0;
function UChar (line 245) | inline UChar
function UChar32 (line 250) | inline UChar32
FILE: deprecated/android/addons/icucompat/unicode/schriter.h
function U_COMMON_API (line 43) | U_COMMON_API StringCharacterIterator : public UCharCharacterIterator {
FILE: deprecated/android/addons/icucompat/unicode/search.h
type USearch (line 31) | struct USearch
type USearch (line 35) | typedef struct USearch USearch;
function U_I18N_API (line 79) | U_I18N_API SearchIterator : public UObject {
function UBool (line 566) | inline UBool SearchIterator::operator!=(const SearchIterator &that) const
FILE: deprecated/android/addons/icucompat/unicode/simpletz.h
type TimeMode (line 75) | enum TimeMode {
type EMode (line 785) | enum EMode
function setStartRule (line 883) | inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWee...
function setStartRule (line 889) | inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
function setStartRule (line 895) | inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth,
function setEndRule (line 901) | inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekI...
function setEndRule (line 907) | inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth,
function setEndRule (line 912) | inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth...
function getOffset (line 917) | inline void
FILE: deprecated/android/addons/icucompat/unicode/smpdtfmt.h
type NSOverride (line 1220) | typedef struct NSOverride {
function UDate (line 1235) | inline UDate
function UnicodeString (line 1241) | inline UnicodeString&
function UnicodeString (line 1250) | inline UnicodeString&
function UnicodeString (line 1261) | inline UnicodeString&
function UnicodeString (line 1272) | inline UnicodeString&
function UnicodeString (line 1281) | inline UnicodeString&
function UnicodeString (line 1291) | inline UnicodeString&
FILE: deprecated/android/addons/icucompat/unicode/sortkey.h
function virtual (line 234) | virtual UClassID getDynamicClassID() const;
function UBool (line 313) | inline UBool
FILE: deprecated/android/addons/icucompat/unicode/strenum.h
function U_COMMON_API (line 55) | U_COMMON_API StringEnumeration : public UObject {
FILE: deprecated/android/addons/icucompat/unicode/stringpiece.h
function U_COMMON_API (line 52) | U_COMMON_API StringPiece : public UMemory {
FILE: deprecated/android/addons/icucompat/unicode/stringtriebuilder.h
type UHashtable (line 27) | struct UHashtable
type UHashtable (line 28) | typedef struct UHashtable UHashtable;
type UStringTrieBuildOption (line 34) | enum UStringTrieBuildOption {
function U_COMMON_API (line 61) | U_COMMON_API StringTrieBuilder : public UObject {
function class (line 254) | class FinalValueNode : public Node {
function class (line 266) | class ValueNode : public Node {
function class (line 283) | class IntermediateValueNode : public ValueNode {
function class (line 297) | class LinearMatchNode : public ValueNode {
function class (line 312) | class BranchNode : public Node {
function class (line 322) | class ListBranchNode : public BranchNode {
function class (line 354) | class SplitBranchNode : public BranchNode {
function class (line 371) | class BranchHeadNode : public ValueNode {
FILE: deprecated/android/addons/icucompat/unicode/symtable.h
function class (line 54) | class U_COMMON_API SymbolTable /* not : public UObject because this is a...
FILE: deprecated/android/addons/icucompat/unicode/tblcoll.h
function setUCollator (line 819) | inline void RuleBasedCollator::setUCollator(const Locale &locale,
function setUCollator (line 826) | inline void RuleBasedCollator::setUCollator(UCollator *collator)
function UCollator (line 839) | inline const UCollator * RuleBasedCollator::getUCollator()
FILE: deprecated/android/addons/icucompat/unicode/timezone.h
function UBool (line 377) | UBool operator!=(const TimeZone& that) const {return !operator==(that);}
type EDisplayType (line 502) | enum EDisplayType {
function UnicodeString (line 884) | inline UnicodeString&
function setID (line 893) | inline void
FILE: deprecated/android/addons/icucompat/unicode/tmunit.h
type UTimeUnitFields (line 36) | enum UTimeUnitFields {
function virtual (line 101) | virtual UClassID getDynamicClassID() const;
FILE: deprecated/android/addons/icucompat/unicode/tmutamt.h
function U_I18N_API (line 31) | U_I18N_API TimeUnitAmount: public Measure {
function UBool (line 157) | inline UBool
FILE: deprecated/android/addons/icucompat/unicode/tmutfmt.h
type UTimeUnitFormatStyle (line 35) | enum UTimeUnitFormatStyle {
type UTimeUnitFormatStyle (line 43) | typedef enum UTimeUnitFormatStyle UTimeUnitFormatStyle;
function UBool (line 259) | inline UBool
FILE: deprecated/android/addons/icucompat/unicode/translit.h
type Transliterator (line 311) | typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, To...
function getMaximumContextLength (line 1300) | inline int32_t Transliterator::getMaximumContextLength(void) const {
function setID (line 1304) | inline void Transliterator::setID(const UnicodeString& id) {
FILE: deprecated/android/addons/icucompat/unicode/tzfmt.h
type UTimeZoneFormatStyle (line 30) | enum UTimeZoneFormatStyle {
type UTimeZoneFormatGMTOffsetPatternType (line 77) | typedef enum UTimeZoneFormatGMTOffsetPatternType {
type UTimeZoneFormatTimeType (line 105) | typedef enum UTimeZoneFormatTimeType {
type UTimeZoneFormatParseOption (line 127) | typedef enum UTimeZoneFormatParseOption {
type OffsetFields (line 598) | enum OffsetFields {
FILE: deprecated/android/addons/icucompat/unicode/tznames.h
type UTimeZoneNameType (line 28) | enum UTimeZoneNameType {
type MatchInfo (line 71) | struct MatchInfo
function UBool (line 139) | UBool operator!=(const TimeZoneNames& other) const { return !operator==(...
FILE: deprecated/android/addons/icucompat/unicode/tzrule.h
function U_I18N_API (line 32) | U_I18N_API TimeZoneRule : public UObject {
FILE: deprecated/android/addons/icucompat/unicode/ubidi.h
type UBiDiLevel (line 330) | typedef uint8_t UBiDiLevel;
type UBiDiDirection (line 417) | enum UBiDiDirection {
type UBiDiDirection (line 459) | typedef enum UBiDiDirection UBiDiDirection;
type UBiDi (line 471) | struct UBiDi
type UBiDi (line 474) | typedef struct UBiDi UBiDi;
type UBiDiReorderingMode (line 687) | typedef enum UBiDiReorderingMode {
type UBiDiReorderingOption (line 898) | typedef enum UBiDiReorderingOption {
type UCharDirection (line 1990) | typedef UCharDirection U_CALLCONV
FILE: deprecated/android/addons/icucompat/unicode/ubrk.h
type UBreakIterator (line 26) | typedef struct UBreakIterator UBreakIterator;
type UBreakIteratorType (line 87) | typedef enum UBreakIteratorType {
type UWordBreak (line 125) | typedef enum UWordBreak {
type ULineBreakTag (line 158) | typedef enum ULineBreakTag {
type USentenceBreakTag (line 180) | typedef enum USentenceBreakTag {
FILE: deprecated/android/addons/icucompat/unicode/ucal.h
type UCalendarType (line 158) | enum UCalendarType {
type UCalendarType (line 178) | typedef enum UCalendarType UCalendarType;
type UCalendarDateFields (line 183) | enum UCalendarDateFields {
type UCalendarDateFields (line 444) | typedef enum UCalendarDateFields UCalendarDateFields;
type UCalendarDaysOfWeek (line 453) | enum UCalendarDaysOfWeek {
type UCalendarDaysOfWeek (line 471) | typedef enum UCalendarDaysOfWeek UCalendarDaysOfWeek;
type UCalendarMonths (line 476) | enum UCalendarMonths {
type UCalendarMonths (line 509) | typedef enum UCalendarMonths UCalendarMonths;
type UCalendarAMPMs (line 514) | enum UCalendarAMPMs {
type UCalendarAMPMs (line 522) | typedef enum UCalendarAMPMs UCalendarAMPMs;
type USystemTimeZoneType (line 530) | enum USystemTimeZoneType {
type USystemTimeZoneType (line 549) | typedef enum USystemTimeZoneType USystemTimeZoneType;
type UCalendarDisplayNameType (line 752) | enum UCalendarDisplayNameType {
type UCalendarDisplayNameType (line 764) | typedef enum UCalendarDisplayNameType UCalendarDisplayNameType;
type UCalendarAttribute (line 849) | enum UCalendarAttribute {
type UCalendarAttribute (line 883) | typedef enum UCalendarAttribute UCalendarAttribute;
type UCalendarWallTimeOption (line 890) | enum UCalendarWallTimeOption {
type UCalendarWallTimeOption (line 916) | typedef enum UCalendarWallTimeOption UCalendarWallTimeOption;
type UCalendarLimitType (line 1213) | enum UCalendarLimitType {
type UCalendarLimitType (line 1229) | typedef enum UCalendarLimitType UCalendarLimitType;
type UCalendarWeekdayType (line 1327) | enum UCalendarWeekdayType {
type UCalendarWeekdayType (line 1353) | typedef enum UCalendarWeekdayType UCalendarWeekdayType;
type UTimeZoneTransitionType (line 1440) | enum UTimeZoneTransitionType {
type UTimeZoneTransitionType (line 1468) | typedef enum UTimeZoneTransitionType UTimeZoneTransitionType;
FILE: deprecated/android/addons/icucompat/unicode/ucasemap.h
type UCaseMap (line 44) | struct UCaseMap
type UCaseMap (line 45) | typedef struct UCaseMap UCaseMap;
FILE: deprecated/android/addons/icucompat/unicode/uchar.h
type UProperty (line 161) | typedef enum UProperty {
type UCharCategory (line 575) | typedef enum UCharCategory
type UCharDirection (line 766) | typedef enum UCharDirection {
type UBlockCode (line 820) | enum UBlockCode {
type UBlockCode (line 1421) | typedef enum UBlockCode UBlockCode;
type UEastAsianWidth (line 1430) | typedef enum UEastAsianWidth {
type UCharNameChoice (line 1457) | typedef enum UCharNameChoice {
type UPropertyNameChoice (line 1487) | typedef enum UPropertyNameChoice {
type UDecompositionType (line 1499) | typedef enum UDecompositionType {
type UJoiningType (line 1533) | typedef enum UJoiningType {
type UJoiningGroup (line 1555) | typedef enum UJoiningGroup {
type UGraphemeClusterBreak (line 1630) | typedef enum UGraphemeClusterBreak {
type UWordBreakValues (line 1660) | typedef enum UWordBreakValues {
type USentenceBreak (line 1690) | typedef enum USentenceBreak {
type ULineBreak (line 1721) | typedef enum ULineBreak {
type UNumericType (line 1779) | typedef enum UNumericType {
type UHangulSyllableType (line 1799) | typedef enum UHangulSyllableType {
type UBool (line 2544) | typedef UBool U_CALLCONV
type UBool (line 2723) | typedef UBool U_CALLCONV UEnumCharNamesFn(void *context,
FILE: deprecated/android/addons/icucompat/unicode/ucharstrie.h
function class (line 100) | class State : public UMemory {
function UStringTrieResult (line 162) | inline UStringTrieResult first(int32_t uchar) {
function getValue (line 220) | inline int32_t getValue() const {
function stop (line 376) | inline void stop() {
function readValue (line 382) | static inline int32_t readValue(const UChar *pos, int32_t leadUnit) {
function UChar (line 393) | static inline const UChar *skipValue(const UChar *pos, int32_t leadUnit) {
function UChar (line 403) | static inline const UChar *skipValue(const UChar *pos) {
function readNodeValue (line 408) | static inline int32_t readNodeValue(const UChar *pos, int32_t leadUnit) {
function UChar (line 420) | static inline const UChar *skipNodeValue(const UChar *pos, int32_t leadU...
function UChar (line 432) | static inline const UChar *jumpByDelta(const UChar *pos) {
function UChar (line 445) | static const UChar *skipDelta(const UChar *pos) {
function UStringTrieResult (line 457) | static inline UStringTrieResult valueResult(int32_t node) {
FILE: deprecated/android/addons/icucompat/unicode/ucharstriebuilder.h
function virtual (line 141) | virtual int32_t getMaxBranchLinearSubNodeLength() const { return UCharsT...
function class (line 146) | class UCTLinearMatchNode : public LinearMatchNode {
FILE: deprecated/android/addons/icucompat/unicode/uchriter.h
function U_COMMON_API (line 33) | U_COMMON_API UCharCharacterIterator : public CharacterIterator {
FILE: deprecated/android/addons/icucompat/unicode/ucnv.h
type USet (line 65) | struct USet
type USet (line 67) | typedef struct USet USet;
type UConverterType (line 90) | typedef enum {
type UConverterPlatform (line 178) | typedef enum {
type UConverterUnicodeSet (line 931) | typedef enum UConverterUnicodeSet {
FILE: deprecated/android/addons/icucompat/unicode/ucnv_err.h
type UConverter (line 91) | struct UConverter
type UConverter (line 94) | typedef struct UConverter UConverter;
type UConverterCallbackReason (line 155) | typedef enum {
type UConverterFromUnicodeArgs (line 192) | typedef struct {
type UConverterToUnicodeArgs (line 208) | typedef struct {
FILE: deprecated/android/addons/icucompat/unicode/ucnvsel.h
type UConverterSelector (line 47) | struct UConverterSelector
type UConverterSelector (line 48) | typedef struct UConverterSelector UConverterSelector;
FILE: deprecated/android/addons/icucompat/unicode/ucol.h
type UCollator (line 58) | struct UCollator
type UCollator (line 62) | typedef struct UCollator UCollator;
type UCollationResult (line 77) | typedef enum {
type UColAttributeValue (line 93) | typedef enum {
type UColReorderCode (line 145) | typedef enum {
type UColAttributeValue (line 234) | typedef UColAttributeValue UCollationStrength;
type UColAttribute (line 240) | typedef enum {
type UColRuleOption (line 336) | typedef enum {
type UColBoundMode (line 1013) | typedef enum {
FILE: deprecated/android/addons/icucompat/unicode/ucoleitr.h
type UCollationElements (line 47) | typedef struct UCollationElements UCollationElements;
FILE: deprecated/android/addons/icucompat/unicode/ucsdet.h
type UCharsetDetector (line 49) | struct UCharsetDetector
type UCharsetDetector (line 54) | typedef struct UCharsetDetector UCharsetDetector;
type UCharsetMatch (line 56) | struct UCharsetMatch
type UCharsetMatch (line 62) | typedef struct UCharsetMatch UCharsetMatch;
FILE: deprecated/android/addons/icucompat/unicode/ucurr.h
type UCurrNameStyle (line 64) | typedef enum UCurrNameStyle {
type UCurrCurrencyType (line 197) | typedef enum UCurrCurrencyType {
FILE: deprecated/android/addons/icucompat/unicode/udat.h
type UDateFormatStyle (line 145) | typedef enum UDateFormatStyle {
type UDateFormatField (line 473) | typedef enum UDateFormatField {
type UDateFormatSymbolType (line 1073) | typedef enum UDateFormatSymbolType {
type UDateFormatSymbols (line 1112) | struct UDateFormatSymbols
type UDateFormatSymbols (line 1117) | typedef struct UDateFormatSymbols UDateFormatSymbols;
type UDateFormat (line 1282) | typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle t...
FILE: deprecated/android/addons/icucompat/unicode/udata.h
type UDataInfo (line 106) | typedef struct {
type UDataMemory (line 151) | typedef struct UDataMemory UDataMemory;
type UBool (line 166) | typedef UBool U_CALLCONV
type UDataFileAccess (line 385) | typedef enum UDataFileAccess {
FILE: deprecated/android/addons/icucompat/unicode/udateintervalformat.h
type UDateIntervalFormat (line 79) | struct UDateIntervalFormat
type UDateIntervalFormat (line 80) | typedef struct UDateIntervalFormat UDateIntervalFormat;
FILE: deprecated/android/addons/icucompat/unicode/udatpg.h
type UDateTimePatternField (line 53) | typedef enum UDateTimePatternField {
type UDateTimePatternMatchOptions (line 97) | typedef enum UDateTimePatternMatchOptions {
type UDateTimePatternConflict (line 116) | typedef enum UDateTimePatternConflict {
FILE: deprecated/android/addons/icucompat/unicode/udisplaycontext.h
type UDisplayContextType (line 21) | enum UDisplayContextType {
type UDisplayContextType (line 39) | typedef enum UDisplayContextType UDisplayContextType;
type UDisplayContext (line 47) | enum UDisplayContext {
type UDisplayContext (line 111) | typedef enum UDisplayContext UDisplayContext;
FILE: deprecated/android/addons/icucompat/unicode/uenum.h
type UEnumeration (line 37) | struct UEnumeration
type UEnumeration (line 39) | typedef struct UEnumeration UEnumeration;
FILE: deprecated/android/addons/icucompat/unicode/ugender.h
type UGender (line 28) | enum UGender {
type UGender (line 48) | typedef enum UGender UGender;
type UGenderInfo (line 54) | struct UGenderInfo
type UGenderInfo (line 55) | typedef struct UGenderInfo UGenderInfo;
FILE: deprecated/android/addons/icucompat/unicode/uidna.h
type UIDNA (line 117) | struct UIDNA
type UIDNA (line 118) | typedef struct UIDNA UIDNA;
type UIDNAInfo (line 177) | typedef struct UIDNAInfo {
FILE: deprecated/android/addons/icucompat/unicode/uiter.h
type UCharIterator (line 41) | typedef struct UCharIterator UCharIterator;
type UCharIteratorOrigin (line 49) | typedef enum UCharIteratorOrigin {
type UBool (line 156) | typedef UBool U_CALLCONV
type UBool (line 170) | typedef UBool U_CALLCONV
type UChar32 (line 185) | typedef UChar32 U_CALLCONV
type UChar32 (line 201) | typedef UChar32 U_CALLCONV
type UChar32 (line 217) | typedef UChar32 U_CALLCONV
type UCharIterator (line 339) | struct UCharIterator {
FILE: deprecated/android/addons/icucompat/unicode/uldnames.h
type UDialectHandling (line 25) | typedef enum {
type ULocaleDisplayNames (line 44) | struct ULocaleDisplayNames
type ULocaleDisplayNames (line 50) | typedef struct ULocaleDisplayNames ULocaleDisplayNames;
FILE: deprecated/android/addons/icucompat/unicode/uloc.h
type ULocDataLocaleType (line 336) | typedef enum {
type ULayoutType (line 886) | typedef enum {
type UAcceptResult (line 924) | typedef enum {
FILE: deprecated/android/addons/icucompat/unicode/ulocdata.h
type ULocaleData (line 31) | struct ULocaleData
type ULocaleData (line 34) | typedef struct ULocaleData ULocaleData;
type ULocaleDataExemplarSetType (line 41) | typedef enum ULocaleDataExemplarSetType {
type ULocaleDataDelimiterType (line 55) | typedef enum ULocaleDataDelimiterType {
type UMeasurementSystem (line 186) | typedef enum UMeasurementSystem {
FILE: deprecated/android/addons/icucompat/unicode/umachine.h
type UBool (line 200) | typedef int8_t UBool;
type UCHAR_TYPE (line 270) | typedef UCHAR_TYPE UChar;
type wchar_t (line 274) | typedef wchar_t UChar;
type __CHAR16_TYPE__ (line 276) | typedef __CHAR16_TYPE__ UChar;
type UChar (line 278) | typedef uint16_t UChar;
type UChar32 (line 298) | typedef int32_t UChar32;
FILE: deprecated/android/addons/icucompat/unicode/umisc.h
type UFieldPosition (line 32) | struct UFieldPosition {
FILE: deprecated/android/addons/icucompat/unicode/unimatch.h
type UMatchDegree (line 30) | enum UMatchDegree {
function class (line 68) | class U_COMMON_API UnicodeMatcher /* not : public UObject because this i...
FILE: deprecated/android/addons/icucompat/unicode/unirepl.h
function class (line 36) | class U_I18N_API UnicodeReplacer /* not : public UObject because this is...
FILE: deprecated/android/addons/icucompat/unicode/uniset.h
function getStringCount (line 1457) | int32_t getStringCount() const;
function UBool (line 1633) | inline UBool UnicodeSet::containsSome(UChar32 start, UChar32 end) const {
function UBool (line 1637) | inline UBool UnicodeSet::containsSome(const UnicodeSet& s) const {
function UBool (line 1641) | inline UBool UnicodeSet::containsSome(const UnicodeString& s) const {
function UnicodeSet (line 1649) | inline UnicodeSet *UnicodeSet::fromUSet(USet *uset) {
function UnicodeSet (line 1653) | inline const UnicodeSet *UnicodeSet::fromUSet(const USet *uset) {
function USet (line 1657) | inline USet *UnicodeSet::toUSet() {
function USet (line 1661) | inline const USet *UnicodeSet::toUSet() const {
function span (line 1665) | inline int32_t UnicodeSet::span(const UnicodeString &s, int32_t start, U...
function spanBack (line 1675) | inline int32_t UnicodeSet::spanBack(const UnicodeString &s, int32_t limi...
FILE: deprecated/android/addons/icucompat/unicode/unistr.h
type UConverter (line 36) | struct UConverter
type EInvariant (line 258) | enum EInvariant {
type EInvariant (line 1508) | enum EInvariant
function UBool (line 3375) | inline UBool isWritable() const;
function pinIndices (line 3580) | inline void
function UChar (line 3598) | inline UChar*
function UChar (line 3602) | inline const UChar*
function UChar (line 3637) | inline const UChar *
function doCompare (line 3651) | inline int8_t
function UBool (line 3666) | inline UBool
function UBool (line 3677) | inline UBool
function UBool (line 3681) | inline UBool
function UBool (line 3685) | inline UBool
function UBool (line 3689) | inline UBool
function UBool (line 3693) | inline UBool
function compare (line 3697) | inline int8_t
function compare (line 3701) | inline int8_t
function compare (line 3707) | inline int8_t
function compare (line 3712) | inline int8_t
function compare (line 3720) | inline int8_t
function compare (line 3726) | inline int8_t
function compareBetween (line 3734) | inline int8_t
function doCompareCodePointOrder (line 3743) | inline int8_t
function compareCodePointOrder (line 3758) | inline int8_t
function compareCodePointOrder (line 3762) | inline int8_t
function compareCodePointOrder (line 3768) | inline int8_t
function compareCodePointOrder (line 3773) | inline int8_t
function compareCodePointOrder (line 3781) | inline int8_t
function compareCodePointOrder (line 3787) | inline int8_t
function compareCodePointOrderBetween (line 3795) | inline int8_t
function doCaseCompare (line 3804) | inline int8_t
function caseCompare (line 3820) | inline int8_t
function caseCompare (line 3825) | inline int8_t
function caseCompare (line 3833) | inline int8_t
function caseCompare (line 3840) | inline int8_t
function caseCompare (line 3850) | inline int8_t
function caseCompare (line 3858) | inline int8_t
function caseCompareBetween (line 3868) | inline int8_t
function indexOf (line 3878) | inline int32_t
function indexOf (line 3894) | inline int32_t
function indexOf (line 3898) | inline int32_t
function indexOf (line 3905) | inline int32_t
function indexOf (line 3911) | inline int32_t
function indexOf (line 3919) | inline int32_t
function indexOf (line 3926) | inline int32_t
function indexOf (line 3932) | inline int32_t
function indexOf (line 3938) | inline int32_t
function indexOf (line 3942) | inline int32_t
function indexOf (line 3946) | inline int32_t
function indexOf (line 3953) | inline int32_t
function lastIndexOf (line 3960) | inline int32_t
function lastIndexOf (line 3967) | inline int32_t
function lastIndexOf (line 3975) | inline int32_t
function lastIndexOf (line 3991) | inline int32_t
function lastIndexOf (line 3997) | inline int32_t
function lastIndexOf (line 4004) | inline int32_t
function lastIndexOf (line 4008) | inline int32_t
function lastIndexOf (line 4014) | inline int32_t
function lastIndexOf (line 4021) | inline int32_t
function lastIndexOf (line 4025) | inline int32_t
function lastIndexOf (line 4030) | inline int32_t
function lastIndexOf (line 4037) | inline int32_t
function UBool (line 4044) | inline UBool
function UBool (line 4048) | inline UBool
function UBool (line 4054) | inline UBool
function UBool (line 4062) | inline UBool
function UBool (line 4070) | inline UBool
function UBool (line 4075) | inline UBool
function UBool (line 4084) | inline UBool
function UBool (line 4094) | inline UBool
function UnicodeString (line 4108) | inline UnicodeString&
function UnicodeString (line 4114) | inline UnicodeString&
function UnicodeString (line 4122) | inline UnicodeString&
function UnicodeString (line 4129) | inline UnicodeString&
function UnicodeString (line 4137) | inline UnicodeString&
function UnicodeString (line 4143) | inline UnicodeString&
function UnicodeString (line 4149) | inline UnicodeString&
function UnicodeString (line 4157) | inline UnicodeString&
function UnicodeString (line 4163) | inline UnicodeString&
function doExtract (line 4174) | inline void
function extract (line 4180) | inline void
function extract (line 4187) | inline void
function extract (line 4195) | inline int32_t
function extractBetween (line 4208) | inline void
function UnicodeString (line 4218) | inline UnicodeString
function UChar (line 4223) | inline UChar
function UChar (line 4233) | inline UChar
function UChar (line 4237) | inline UChar
function setLength (line 4249) | inline void
function setToEmpty (line 4259) | inline void
function setArray (line 4265) | inline void
function UChar (line 4272) | inline const UChar *
function UnicodeString (line 4322) | inline UnicodeString&
function UnicodeString (line 4331) | inline UnicodeString&
function UnicodeString (line 4340) | inline UnicodeString&
function UnicodeString (line 4346) | inline UnicodeString&
function UnicodeString (line 4354) | inline UnicodeString&
function UnicodeString (line 4361) | inline UnicodeString&
function UnicodeString (line 4368) | inline UnicodeString&
function UnicodeString (line 4374) | inline UnicodeString&
function UnicodeString (line 4378) | inline UnicodeString&
function UnicodeString (line 4384) | inline UnicodeString&
function UnicodeString (line 4389) | inline UnicodeString&
function UnicodeString (line 4393) | inline UnicodeString&
function UnicodeString (line 4397) | inline UnicodeString&
function UnicodeString (line 4402) | inline UnicodeString&
function UnicodeString (line 4406) | inline UnicodeString&
function UnicodeString (line 4413) | inline UnicodeString&
function UnicodeString (line 4418) | inline UnicodeString&
function UnicodeString (line 4425) | inline UnicodeString&
function UnicodeString (line 4431) | inline UnicodeString&
function UnicodeString (line 4436) | inline UnicodeString&
function UnicodeString (line 4442) | inline UnicodeString&
function UnicodeString (line 4456) | inline UnicodeString&
function UnicodeString (line 4467) | inline UnicodeString&
function UnicodeString (line 4472) | inline UnicodeString &
function UBool (line 4478) | inline UBool
function UnicodeString (line 4496) | inline UnicodeString&
function UnicodeString (line 4500) | inline UnicodeString&
FILE: deprecated/android/addons/icucompat/unicode/unorm.h
type UNormalizationMode (line 133) | typedef enum {
FILE: deprecated/android/addons/icucompat/unicode/unorm2.h
type UNormalization2Mode (line 42) | typedef enum {
type UNormalizationCheckResult (line 91) | typedef enum UNormalizationCheckResult {
type UNormalizer2 (line 116) | struct UNormalizer2
type UNormalizer2 (line 117) | typedef struct UNormalizer2 UNormalizer2;
FILE: deprecated/android/addons/icucompat/unicode/unum.h
type UNumberFormatStyle (line 135) | typedef enum UNumberFormatStyle {
type UNumberFormatRoundingMode (line 217) | typedef enum UNumberFormatRoundingMode {
type UNumberFormatPadPosition (line 246) | typedef enum UNumberFormatPadPosition {
type UCurrencySpacing (line 257) | enum UCurrencySpacing {
type UCurrencySpacing (line 267) | typedef enum UCurrencySpacing UCurrencySpacing;
type UNumberFormatFields (line 275) | typedef enum UNumberFormatFields {
type UNumberFormatAttributeValue (line 722) | typedef enum UNumberFormatAttributeValue {
type UNumberFormatAttribute (line 733) | typedef enum UNumberFormatAttribute {
type UNumberFormatTextAttribute (line 898) | typedef enum UNumberFormatTextAttribute {
type UNumberFormatSymbol (line 1001) | typedef enum UNumberFormatSymbol {
FILE: deprecated/android/addons/icucompat/unicode/uobject.h
function U_COMMON_API (line 115) | U_COMMON_API UMemory {
function UBool (line 270) | inline UBool operator!=(const UObject &other) const { return !operator==...
FILE: deprecated/android/addons/icucompat/unicode/upluralrules.h
type UPluralType (line 44) | enum UPluralType {
type UPluralType (line 64) | typedef enum UPluralType UPluralType;
type UPluralRules (line 70) | struct UPluralRules
type UPluralRules (line 71) | typedef struct UPluralRules UPluralRules;
FILE: deprecated/android/addons/icucompat/unicode/uregex.h
type URegularExpression (line 34) | struct URegularExpression
type URegularExpression (line 40) | typedef struct URegularExpression URegularExpression;
type URegexpFlag (line 47) | typedef enum URegexpFlag{
FILE: deprecated/android/addons/icucompat/unicode/urep.h
type UReplaceableCallbacks (line 51) | typedef struct UReplaceableCallbacks {
FILE: deprecated/android/addons/icucompat/unicode/ures.h
type UResourceBundle (line 52) | struct UResourceBundle
type UResourceBundle (line 57) | typedef struct UResourceBundle UResourceBundle;
type UResType (line 64) | typedef enum {
function U_NAMESPACE_BEGIN (line 789) | U_NAMESPACE_BEGIN
function UnicodeString (line 820) | inline UnicodeString
function UnicodeString (line 839) | inline UnicodeString
function UnicodeString (line 859) | inline UnicodeString
FILE: deprecated/android/addons/icucompat/unicode/uscript.h
type UScriptCode (line 46) | typedef enum UScriptCode {
FILE: deprecated/android/addons/icucompat/unicode/usearch.h
type UStringSearch (line 146) | struct UStringSearch
type UStringSearch (line 151) | typedef struct UStringSearch UStringSearch;
type USearchAttribute (line 156) | typedef enum {
type USearchAttributeValue (line 177) | typedef enum {
FILE: deprecated/android/addons/icucompat/unicode/uset.h
type USet (line 35) | struct USet
type USet (line 41) | typedef struct USet USet;
type USetSpanCondition (line 150) | typedef enum USetSpanCondition {
type USerializedSet (line 219) | typedef struct USerializedSet {
FILE: deprecated/android/addons/icucompat/unicode/usetiter.h
function UBool (line 138) | inline UBool isString() const;
FILE: deprecated/android/addons/icucompat/unicode/uspoof.h
type USpoofChecker (line 144) | struct USpoofChecker
type USpoofChecker (line 145) | typedef struct USpoofChecker USpoofChecker;
type USpoofChecks (line 154) | typedef enum USpoofChecks {
FILE: deprecated/android/addons/icucompat/unicode/usprep.h
type UStringPrepProfile (line 68) | typedef struct UStringPrepProfile UStringPrepProfile;
type UStringPrepProfileType (line 93) | typedef enum UStringPrepProfileType {
FILE: deprecated/android/addons/icucompat/unicode/ustring.h
type UBreakIterator (line 31) | typedef struct UBreakIterator UBreakIterator;
FILE: deprecated/android/addons/icucompat/unicode/ustringtrie.h
type UStringTrieResult (line 33) | enum UStringTrieResult {
FILE: deprecated/android/addons/icucompat/unicode/utext.h
type UText (line 151) | typedef struct UText UText;
type UText (line 998) | typedef UText * U_CALLCONV
type UBool (line 1038) | typedef UBool U_CALLCONV
type UTextFuncs (line 1209) | struct UTextFuncs {
type UTextFuncs (line 1330) | typedef struct UTextFuncs UTextFuncs;
type UText (line 1343) | struct UText {
FILE: deprecated/android/addons/icucompat/unicode/utf_old.h
type UTextOffset (line 162) | typedef int32_t UTextOffset;
FILE: deprecated/android/addons/icucompat/unicode/utmscale.h
type UDateTimeScale (line 202) | typedef enum UDateTimeScale {
type UTimeScaleValue (line 298) | typedef enum UTimeScaleValue {
FILE: deprecated/android/addons/icucompat/unicode/utrace.h
type UTraceLevel (line 44) | enum UTraceLevel {
type UTraceFunctionNumber (line 63) | typedef enum UTraceFunctionNumber {
FILE: deprecated/android/addons/icucompat/unicode/utrans.h
type UTransDirection (line 77) | typedef enum UTransDirection {
type UTransPosition (line 119) | typedef struct UTransPosition {
FILE: deprecated/android/addons/icucompat/unicode/utypes.h
type UDate (line 201) | typedef double UDate;
function delete (line 438) | inline void
type UErrorCode (line 476) | typedef enum UErrorCode {
function UBool (line 692) | static
function UBool (line 698) | static
FILE: deprecated/android/addons/icucompat/unicode/uversion.h
function namespace (line 110) | namespace U_ICU_NAMESPACE { }
function namespace (line 113) | namespace U_ICU_NAMESPACE { }
FILE: deprecated/android/addons/repair/SQLiteRepairKit.h
type sqliterk (line 30) | typedef struct sqliterk sqliterk;
type sqliterk_table (line 31) | typedef struct sqliterk_table sqliterk_table;
type sqliterk_column (line 32) | typedef struct sqliterk_column sqliterk_column;
type sqliterk_notify (line 34) | typedef struct sqliterk_notify sqliterk_notify;
type sqliterk_notify (line 35) | struct sqliterk_notify {
type sqliterk_cipher_conf (line 49) | typedef struct sqliterk_cipher_conf {
type sqlite3 (line 60) | typedef struct sqlite3 sqlite3;
type sqliterk_master_info (line 61) | typedef struct sqliterk_master_info sqliterk_master_info;
type sqliterk_leaf_info (line 62) | typedef struct sqliterk_leaf_info sqliterk_leaf_info;
type sqliterk_type (line 129) | typedef enum {
type sqliterk_value_type (line 147) | typedef enum {
type sqliterk_loglevel (line 175) | typedef enum {
type sqliterk_os (line 182) | typedef struct sqliterk_os sqliterk_os;
type sqliterk_os (line 183) | struct sqliterk_os {
FILE: deprecated/android/addons/repair/sqliterk.c
type sqliterk (line 31) | struct sqliterk {
function sqliterkOpen (line 57) | int sqliterkOpen(const char *path,
function sqliterk_set_recursive (line 98) | void sqliterk_set_recursive(sqliterk *rk, int recursive)
function sqliterkParse (line 103) | int sqliterkParse(sqliterk *rk)
function sqliterkParsePage (line 117) | int sqliterkParsePage(sqliterk *rk, int pageno)
function sqliterkParseBtree (line 140) | static int sqliterkParseBtree(sqliterk *rk, sqliterk_btree *btree)
function sqliterkParseMaster (line 156) | int sqliterkParseMaster(sqliterk *rk)
function sqliterkClose (line 163) | int sqliterkClose(sqliterk *rk)
function sqliterkNotify_onBeginParseBtree (line 176) | static void sqliterkNotify_onBeginParseBtree(sqliterk *rk,
function sqliterkNotify_onEndParseBtree (line 189) | static void
function sqliterkNotify_onParseColumn (line 197) | static int sqliterkNotify_onParseColumn(sqliterk *rk,
function sqliterkNotify_onBeginParsePage (line 272) | static int
function sqliterkNotify_onEndParsePage (line 283) | static void sqliterkNotify_onEndParsePage(sqliterk *rk,
function sqliterkSetNotify (line 314) | int sqliterkSetNotify(sqliterk *rk, sqliterk_notify notify)
function sqliterkSetUserInfo (line 323) | int sqliterkSetUserInfo(sqliterk *rk, void *userInfo)
function sqliterkGetParsedPageCount (line 340) | int sqliterkGetParsedPageCount(sqliterk *rk)
function sqliterkGetDamagedPageCount (line 348) | int sqliterkGetDamagedPageCount(sqliterk *rk)
function sqliterkGetValidPageCount (line 356) | int sqliterkGetValidPageCount(sqliterk *rk)
function sqliterkGetPageCount (line 364) | int sqliterkGetPageCount(sqliterk *rk)
function sqliterkGetIntegrity (line 372) | unsigned int sqliterkGetIntegrity(sqliterk *rk)
FILE: deprecated/android/addons/repair/sqliterk.h
type sqliterk (line 24) | typedef struct sqliterk sqliterk;
type sqliterk_cipher_conf (line 25) | typedef struct sqliterk_cipher_conf sqliterk_cipher_conf;
type sqliterk_notify (line 26) | typedef struct sqliterk_notify sqliterk_notify;
FILE: deprecated/android/addons/repair/sqliterk_api.c
function sqliterk_register_notify (line 30) | int sqliterk_register_notify(sqliterk *rk, sqliterk_notify notify)
function sqliterk_open (line 35) | int sqliterk_open(const char *path,
function sqliterk_parse (line 47) | int sqliterk_parse(sqliterk *rk)
function sqliterk_parse_page (line 52) | int sqliterk_parse_page(sqliterk *rk, int pageno)
function sqliterk_parse_master (line 57) | int sqliterk_parse_master(sqliterk *rk)
function sqliterk_close (line 62) | int sqliterk_close(sqliterk *rk)
function sqliterk_set_user_info (line 72) | void sqliterk_set_user_info(sqliterk *rk, void *userInfo)
function sqliterk_column_count (line 77) | int sqliterk_column_count(sqliterk_column *column)
function sqliterk_value_type (line 82) | sqliterk_value_type sqliterk_column_type(sqliterk_column *column, int in...
function sqliterk_column_integer (line 87) | int sqliterk_column_integer(sqliterk_column *column, int index)
function sqliterk_column_integer64 (line 92) | int64_t sqliterk_column_integer64(sqliterk_column *column, int index)
function sqliterk_column_number (line 97) | double sqliterk_column_number(sqliterk_column *column, int index)
function sqliterk_column_bytes (line 112) | int sqliterk_column_bytes(sqliterk_column *column, int index)
function sqliterk_column_rowid (line 117) | int64_t sqliterk_column_rowid(sqliterk_column *column)
function sqliterk_table_set_user_info (line 127) | void sqliterk_table_set_user_info(sqliterk_table *table, void *userInfo)
function sqliterk_type (line 137) | sqliterk_type sqliterk_table_type(sqliterk_table *table)
function sqliterk_register (line 142) | int sqliterk_register(sqliterk_os os)
function sqliterk_table_root (line 147) | int sqliterk_table_root(sqliterk_table *table)
function sqliterk_parsed_page_count (line 158) | int sqliterk_parsed_page_count(sqliterk *rk)
function sqliterk_damaged_page_count (line 163) | int sqliterk_damaged_page_count(sqliterk *rk)
function sqliterk_valid_page_count (line 168) | int sqliterk_valid_page_count(sqliterk *rk)
function sqliterk_page_count (line 173) | int sqliterk_page_count(sqliterk *rk)
function sqliterk_integrity (line 178) | unsigned int sqliterk_integrity(sqliterk *rk)
function sqliterk_cipher_conf_set_key (line 183) | void sqliterk_cipher_conf_set_key(sqliterk_cipher_conf *conf, const void...
FILE: deprecated/android/addons/repair/sqliterk_btree.c
type sqliterk_btree (line 44) | struct sqliterk_btree {
function sqliterkBtreeOpen (line 60) | int sqliterkBtreeOpen(sqliterk *rk,
function sqliterkBtreeParse (line 125) | int sqliterkBtreeParse(sqliterk_btree *btree)
function sqliterkBtreeParsePage (line 146) | static int sqliterkBtreeParsePage(sqliterk_btree *btree, int pageno)
function sqliterkBtreeParseCell (line 275) | static int sqliterkBtreeParseCell(sqliterk_btree *btree,
function sqliterkBtreeParsePayload (line 338) | static int sqliterkBtreeParsePayload(sqliterk_btree *btree,
function sqliterkBtreeClose (line 495) | int sqliterkBtreeClose(sqliterk_btree *btree)
function sqliterkBtreeSetMeta (line 516) | int sqliterkBtreeSetMeta(sqliterk_btree *btree,
function sqliterk_btree_type (line 562) | sqliterk_btree_type sqliterkBtreeGetType(sqliterk_btree *btree)
function sqliterkBtreeSetType (line 570) | int sqliterkBtreeSetType(sqliterk_btree *btree, sqliterk_btree_type type)
function sqliterkBtreeIsSystemType (line 583) | int sqliterkBtreeIsSystemType(sqliterk_btree_type type)
function sqliterkBtreeSetNotify (line 592) | void sqliterkBtreeSetNotify(sqliterk_btree *btree,
function sqliterkBtreeSetUserInfo (line 601) | void sqliterkBtreeSetUserInfo(sqliterk_btree *btree, void *userInfo)
function sqliterk_page (line 617) | sqliterk_page *sqliterkBtreeGetRootPage(sqliterk_btree *btree)
function sqliterkBtreeGetLengthForSerialType (line 656) | static int sqliterkBtreeGetLengthForSerialType(int serialType)
FILE: deprecated/android/addons/repair/sqliterk_output.cpp
type Op (line 52) | enum Op {
function setKey (line 63) | void setKey(const void *key, unsigned int keyLength)
function cipher (line 74) | void cipher(unsigned char *data, unsigned int length)
type sqliterk_master_entity (line 113) | struct sqliterk_master_entity {
method sqliterk_master_entity (line 118) | sqliterk_master_entity() {}
method sqliterk_master_entity (line 120) | sqliterk_master_entity(sqliterk_type type_,
type sqliterk_master_info (line 128) | struct sqliterk_master_info : public sqliterk_master_map {}
type sqliterk_leaf_info (line 131) | struct sqliterk_leaf_info : public sqliterk_leaf_map {}
type sqliterk_output_column_info (line 133) | struct sqliterk_output_column_info {
method sqliterk_output_column_info (line 138) | sqliterk_output_column_info(char aff, bool nn, sqlite3_value *dflt) :
method sqliterk_output_column_info (line 141) | sqliterk_output_column_info(sqliterk_output_column_info&& other) :
type sqliterk_output_ctx (line 153) | struct sqliterk_output_ctx {
function dummyParseTableCallback (line 175) | static void dummyParseTableCallback(sqliterk *rk, sqliterk_table *table)
function master_onParseColumn (line 179) | static int master_onParseColumn(sqliterk *rk,
function fini_insert (line 243) | static void fini_insert(sqliterk_output_ctx *ctx)
function sqlite3_value (line 255) | static sqlite3_value *eval_value(sqlite3 *db, const char *value)
function string_digits (line 283) | static constexpr uint32_t string_digits(const char *s)
function parse_affinity (line 296) | static char parse_affinity(const char *type)
function init_insert (line 331) | static int init_insert(sqliterk_output_ctx *ctx, const std::string &table)
function table_onBeginParseTable (line 412) | static void table_onBeginParseTable(sqliterk *rk, sqliterk_table *table)
function table_onParseColumn (line 422) | static int table_onParseColumn(sqliterk *rk,
function sqliterk_output (line 565) | int sqliterk_output(sqliterk *rk,
function sqliterk_output_cb (line 573) | int sqliterk_output_cb(sqliterk *rk,
function sqliterk_output_cb_leaf (line 586) | int sqliterk_output_cb_leaf(sqliterk *rk,
function sqliterk_cancel (line 760) | void sqliterk_cancel(sqliterk *rk)
function sqliterk_make_master (line 769) | int sqliterk_make_master(const char **tables,
type master_file_header (line 794) | struct master_file_header {
type master_file_entity (line 801) | struct master_file_entity {
function sqliterk_save_master (line 813) | int sqliterk_save_master(sqlite3 *db,
function inflate_read (line 1020) | static int inflate_read(FILE *fp,
function pstrcmp (line 1059) | static int pstrcmp(const void *p1, const void *p2)
function sqliterk_load_master (line 1064) | int sqliterk_load_master(const char *path,
function sqliterk_free_master (line 1206) | void sqliterk_free_master(sqliterk_master_info *master)
function sqliterk_scan_leaf (line 1212) | int sqliterk_scan_leaf(sqlite3 *db, const char * const *tables, int num_...
function sqliterk_save_leaf (line 1271) | int sqliterk_save_leaf(const sqliterk_leaf_info *li, const char *path)
function sqliterk_load_leaf (line 1310) | int sqliterk_load_leaf(const char *path, sqliterk_leaf_info** out)
function sqliterk_free_leaf (line 1353) | void sqliterk_free_leaf(sqliterk_leaf_info *li)
FILE: deprecated/android/addons/repair/sqliterk_pager.c
type sqliterk_page (line 35) | struct sqliterk_page {
function sqliterkPagerOpen (line 41) | int sqliterkPagerOpen(const char *path,
function sqliterkPagerParseHeader (line 137) | static int sqliterkPagerParseHeader(sqliterk_pager *pager, int forcePage...
function sqliterkPagerClose (line 285) | int sqliterkPagerClose(sqliterk_pager *pager)
function sqliterkPagerGetPageCount (line 308) | int sqliterkPagerGetPageCount(sqliterk_pager *pager)
function sqliterkPagerIsPagenoValid (line 316) | int sqliterkPagerIsPagenoValid(sqliterk_pager *pager, int pageno)
function sqliterkPageAcquireType (line 325) | int sqliterkPageAcquireType(sqliterk_pager *pager,
function sqliterkPageAcquire (line 368) | int sqliterkPageAcquire(sqliterk_pager *pager, int pageno, sqliterk_page...
function sqliterkPageAcquireOverflow (line 374) | int sqliterkPageAcquireOverflow(sqliterk_pager *pager,
function sqliterkPageAcquireOne (line 382) | static int sqliterkPageAcquireOne(sqliterk_pager *pager,
function sqliterkPageRelease (line 450) | int sqliterkPageRelease(sqliterk_page *page)
function sqliterkPageClearData (line 464) | int sqliterkPageClearData(sqliterk_page *page)
function sqliterkPagerGetSize (line 484) | int sqliterkPagerGetSize(sqliterk_pager *pager)
function sqliterkPagerGetUsableSize (line 492) | int sqliterkPagerGetUsableSize(sqliterk_pager *pager)
function sqliterkPageGetPageno (line 500) | int sqliterkPageGetPageno(sqliterk_page *page)
function sqliterk_page_type (line 507) | sqliterk_page_type sqliterkPageGetType(sqliterk_page *page)
function sqliterkPagenoHeaderOffset (line 515) | int sqliterkPagenoHeaderOffset(int pageno)
function sqliterkPageHeaderOffset (line 523) | int sqliterkPageHeaderOffset(sqliterk_page *page)
function sqliterkPagerSetStatus (line 554) | void sqliterkPagerSetStatus(sqliterk_pager *pager,
function sqliterk_status (line 572) | sqliterk_status sqliterkPagerGetStatus(sqliterk_pager *pager, int pageno)
function sqliterkPagerGetParsedPageCount (line 581) | int sqliterkPagerGetParsedPageCount(sqliterk_pager *pager)
function sqliterkPagerGetDamagedPageCount (line 589) | int sqliterkPagerGetDamagedPageCount(sqliterk_pager *pager)
function sqliterkPagerGetValidPageCount (line 597) | int sqliterkPagerGetValidPageCount(sqliterk_pager *pager)
function sqliterkPagerGetIntegrity (line 605) | unsigned int sqliterkPagerGetIntegrity(sqliterk_pager *pager)
FILE: deprecated/android/addons/repair/sqliterk_pager.h
type sqliterk_status (line 34) | typedef enum {
type sqliterk_page_type (line 44) | typedef enum {
type sqliterk_pager (line 54) | typedef struct sqliterk_pager sqliterk_pager;
type sqliterk_page (line 56) | typedef struct sqliterk_page sqliterk_page;
type sqliterk_file (line 58) | typedef struct sqliterk_file sqliterk_file;
type sqliterk_cipher_conf (line 59) | typedef struct sqliterk_cipher_conf sqliterk_cipher_conf;
type sqliterk_pager (line 60) | struct sqliterk_pager {
FILE: deprecated/android/addons/repair/sqliterk_values.c
type sqliterk_integer (line 31) | typedef int64_t sqliterk_integer;
type sqliterk_number (line 32) | typedef double sqliterk_number;
type sqliterk_text (line 33) | typedef struct sqliterk_text sqliterk_text;
type sqliterk_text (line 34) | struct sqliterk_text {
type sqliterk_binary (line 38) | typedef struct sqliterk_binary sqliterk_binary;
type sqliterk_binary (line 39) | struct sqliterk_binary {
type sqliterk_any (line 43) | typedef union sqliterk_any sqliterk_any;
type sqliterk_value (line 51) | struct sqliterk_value {
type sqliterk_values (line 56) | struct sqliterk_values {
function sqliterkValuesAlloc (line 62) | int sqliterkValuesAlloc(sqliterk_values **values)
function sqliterkValuesFree (line 86) | int sqliterkValuesFree(sqliterk_values *values)
function sqliterkValuesClear (line 107) | int sqliterkValuesClear(sqliterk_values *values)
function sqliterkValuesAutoGrow (line 122) | static int sqliterkValuesAutoGrow(sqliterk_values *values)
function sqliterkValuesGetCount (line 154) | int sqliterkValuesGetCount(sqliterk_values *values)
function sqliterk_value_type (line 162) | sqliterk_value_type sqliterkValuesGetType(sqliterk_values *values, int i...
function sqliterkValuesGetInteger64 (line 170) | int64_t sqliterkValuesGetInteger64(sqliterk_values *values, int index)
function sqliterkValuesGetInteger (line 192) | int sqliterkValuesGetInteger(sqliterk_values *values, int index)
function sqliterkValuesGetNumber (line 197) | double sqliterkValuesGetNumber(sqliterk_values *values, int index)
function sqliterkValuesGetBytes (line 251) | int sqliterkValuesGetBytes(sqliterk_values *values, int index)
function sqliterkValuesAddInteger64 (line 270) | int sqliterkValuesAddInteger64(sqliterk_values *values, int64_t i)
function sqliterkValuesAddInteger (line 286) | int sqliterkValuesAddInteger(sqliterk_values *values, int i)
function sqliterkValuesAddNumber (line 291) | int sqliterkValuesAddNumber(sqliterk_values *values, double d)
function sqliterkValuesAddText (line 307) | int sqliterkValuesAddText(sqliterk_values *values, const char *t)
function sqliterkValuesAddNoTerminatorText (line 312) | int sqliterkValuesAddNoTerminatorText(sqliterk_values *values,
function sqliterkValuesAddBinary (line 341) | int sqliterkValuesAddBinary(sqliterk_values *values, const void *b, cons...
function sqliterkValuesAddNull (line 362) | int sqliterkValuesAddNull(sqliterk_values *values)
function sqliterkValueClear (line 377) | int sqliterkValueClear(sqliterk_value *value)
FILE: deprecated/android/addons/vfslog/vfslog.c
type VLogLog (line 104) | typedef struct VLogLog VLogLog;
type VLogVfs (line 105) | typedef struct VLogVfs VLogVfs;
type VLogFile (line 106) | typedef struct VLogFile VLogFile;
type VLogLog (line 114) | struct VLogLog {
type VLogVfs (line 129) | struct VLogVfs {
type VLogFile (line 134) | struct VLogFile {
function sqlite3_uint64 (line 235) | static sqlite3_uint64 vlog_time()
function sqlite3_uint64 (line 244) | static sqlite3_uint64 vlog_time()
function sqlite3_uint64 (line 259) | static sqlite3_uint64 vlog_time()
function vlogLogPrint (line 268) | static void vlogLogPrint(VLogLog *pLog, /* The log file to write...
function vlogLogClose (line 323) | static void vlogLogClose(VLogLog *p)
function VLogLog (line 347) | static VLogLog *vlogLogOpen(const char *zFilename)
function vlogClose (line 443) | static int vlogClose(sqlite3_file *pFile)
function vlogSignature (line 468) | static void vlogSignature(unsigned char *p, int n, char *zCksum)
function bigToNative (line 492) | static int bigToNative(const unsigned char *x)
function vlogRead (line 500) | static int
function vlogWrite (line 550) | static int
function vlogTruncate (line 595) | static int vlogTruncate(sqlite3_file *pFile, sqlite_int64 size)
function vlogSync (line 610) | static int vlogSync(sqlite3_file *pFile, int flags)
function vlogFileSize (line 625) | static int vlogFileSize(sqlite3_file *pFile, sqlite_int64 *pSize)
function vlogLock (line 640) | static int vlogLock(sqlite3_file *pFile, int eLock)
function vlogUnlock (line 655) | static int vlogUnlock(sqlite3_file *pFile, int eLock)
function vlogCheckReservedLock (line 669) | static int vlogCheckReservedLock(sqlite3_file *pFile, int *pResOut)
function vlogFcntlStats (line 682) | static int vlogFcntlStats(VLogFile *p, VLogStat *stats)
function vlogFileControl (line 706) | static int vlogFileControl(sqlite3_file *pFile, int op, void *pArg)
function vlogSectorSize (line 742) | static int vlogSectorSize(sqlite3_file *pFile)
function vlogDeviceCharacteristics (line 757) | static int vlogDeviceCharacteristics(sqlite3_file *pFile)
function vlogShmMap (line 769) | static int vlogShmMap(sqlite3_file *pFile,
function vlogShmLock (line 786) | static int vlogShmLock(sqlite3_file *pFile, int offset, int n, int flags)
function vlogShmBarrier (line 814) | static void vlogShmBarrier(sqlite3_file *pFile)
function vlogShmUnmap (line 821) | static int vlogShmUnmap(sqlite3_file *pFile, int deleteFlag)
function vlogFetch (line 834) | static int
function vlogUnfetch (line 849) | static int vlogUnfetch(sqlite3_file *pFile, sqlite3_int64 iOff, void *pp)
function vlogOpen (line 864) | static int vlogOpen(sqlite3_vfs *pVfs,
function vlogDelete (line 903) | static int vlogDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync)
function vlogAccess (line 921) | static int
function vlogFullPathname (line 941) | static int
function vlogDlError (line 960) | static void vlogDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg)
function vlogDlClose (line 976) | static void vlogDlClose(sqlite3_vfs *pVfs, void *pHandle)
function vlogRandomness (line 985) | static int vlogRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut)
function vlogSleep (line 994) | static int vlogSleep(sqlite3_vfs *pVfs, int nMicro)
function vlogCurrentTime (line 1002) | static int vlogCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut)
function vlogGetLastError (line 1007) | static int vlogGetLastError(sqlite3_vfs *pVfs, int a, char *b)
function vlogCurrentTimeInt64 (line 1012) | static int vlogCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p)
function vlogSetSystemCall (line 1017) | static int vlogSetSystemCall(sqlite3_vfs *pVfs,
function sqlite3_syscall_ptr (line 1024) | static sqlite3_syscall_ptr vlogGetSystemCall(sqlite3_vfs *pVfs,
function sqlite3_register_vfslog (line 1038) | int sqlite3_register_vfslog(const char *zArg)
function vlogGetStats (line 1047) | int vlogGetStats(sqlite3 *db, const char *dbName, VLogStat *stats)
FILE: deprecated/android/addons/vfslog/vfslog.h
type VLogOp (line 33) | typedef enum VLogOp {
type VLogStat (line 61) | typedef struct VLogStat {
FILE: deprecated/android/jni/ChunkedCursorWindow.cpp
type wcdb (line 24) | namespace wcdb {
function status_t (line 88) | status_t ChunkedCursorWindow::create(size_t size,
function status_t (line 139) | status_t ChunkedCursorWindow::setNumColumns(uint32_t columns)
function status_t (line 374) | status_t ChunkedCursorWindow::clear()
function status_t (line 392) | status_t ChunkedCursorWindow::removeChunk(uint32_t row,
FILE: deprecated/android/jni/ChunkedCursorWindow.h
function namespace (line 28) | namespace wcdb {
FILE: deprecated/android/jni/CursorWindow.cpp
type wcdb (line 32) | namespace wcdb {
function status_t (line 45) | status_t CursorWindow::create(size_t size, CursorWindow **outCursorWin...
function status_t (line 68) | status_t CursorWindow::clear()
function status_t (line 81) | status_t CursorWindow::setNumColumns(uint32_t numColumns)
function status_t (line 92) | status_t CursorWindow::allocRow(RowSlot **outSlot)
function status_t (line 128) | status_t CursorWindow::freeLastRow()
function status_t (line 219) | status_t CursorWindow::putBlob(RowSlot *row,
function status_t (line 227) | status_t CursorWindow::putString(RowSlot *row,
function status_t (line 236) | status_t CursorWindow::putBlobOrString(
function status_t (line 258) | status_t CursorWindow::putLong(RowSlot *row, uint32_t column, int64_t ...
function status_t (line 270) | status_t CursorWindow::putDouble(RowSlot *row, uint32_t column, double...
function status_t (line 282) | status_t CursorWindow::putNull(RowSlot *row, uint32_t column)
FILE: deprecated/android/jni/CursorWindow.h
function namespace (line 39) | namespace wcdb {
FILE: deprecated/android/jni/Errors.h
function namespace (line 23) | namespace wcdb {
FILE: deprecated/android/jni/JNIHelp.cpp
class scoped_local_ref (line 31) | class scoped_local_ref {
method scoped_local_ref (line 33) | scoped_local_ref(C_JNIEnv *env, T localRef = NULL)
method reset (line 40) | void reset(T localRef = NULL)
method T (line 49) | T get() const { return mLocalRef; }
function jclass (line 60) | static jclass findClass(C_JNIEnv *env, const char *className)
function jniRegisterNativeMethods (line 66) | int jniRegisterNativeMethods(C_JNIEnv *env,
function jniThrowException (line 229) | int
function jniThrowExceptionFmt (line 264) | int jniThrowExceptionFmt(C_JNIEnv *env,
function jniThrowNullPointerException (line 274) | int jniThrowNullPointerException(C_JNIEnv *env, const char *msg)
function jniThrowRuntimeException (line 279) | int jniThrowRuntimeException(C_JNIEnv *env, const char *msg)
function jniThrowIOException (line 284) | int jniThrowIOException(C_JNIEnv *env, int errnum)
function jniLogException (line 291) | void jniLogException(C_JNIEnv *env,
function jint (line 356) | jint JNIHelp_JNI_OnLoad(JavaVM *vm, void *)
function C_JNIEnv (line 399) | C_JNIEnv *jniGetEnv_()
function jobject (line 410) | jobject jniCreateFileDescriptor(C_JNIEnv *env, int fd)
function jniGetFDFromFileDescriptor (line 419) | int jniGetFDFromFileDescriptor(C_JNIEnv *env, jobject fileDescriptor)
function jniSetFileDescriptorOfFD (line 426) | void jniSetFileDescriptorOfFD(C_JNIEnv *env, jobject fileDescriptor, int...
function jobject (line 433) | jobject jniGetReferent(C_JNIEnv *env, jobject ref)
function jbyte (line 455) | jbyte *jniGetNonMovableArrayElements(C_JNIEnv *env, jarray arrayObj)
FILE: deprecated/android/jni/JNIHelp.h
function jniRegisterNativeMethods (line 129) | inline int jniRegisterNativeMethods(JNIEnv *env,
function jniThrowException (line 138) | inline int
function jniThrowExceptionFmt (line 153) | inline int
function jniThrowNullPointerException (line 162) | inline int jniThrowNullPointerException(JNIEnv *env, const char *msg)
function jniThrowRuntimeException (line 167) | inline int jniThrowRuntimeException(JNIEnv *env, const char *msg)
function jniThrowIOException (line 172) | inline int jniThrowIOException(JNIEnv *env, int errnum)
function jobject (line 177) | inline jobject jniCreateFileDescriptor(JNIEnv *env, int fd)
function jniGetFDFromFileDescriptor (line 182) | inline int jniGetFDFromFileDescriptor(JNIEnv *env, jobject fileDescriptor)
function jniSetFileDescriptorOfFD (line 187) | inline void
function jobject (line 193) | inline jobject jniGetReferent(JNIEnv *env, jobject ref)
function JNIEnv (line 206) | inline JNIEnv *jniGetEnv()
FILE: deprecated/android/jni/Logger.c
function dummy_log (line 26) | static int dummy_log(int prio, const char *tag, const char *msg)
function wcdb_logfunc_t (line 31) | wcdb_logfunc_t wcdb_get_log_function()
function wcdb_set_log_function (line 36) | void wcdb_set_log_function(wcdb_logfunc_t func)
function wcdb_log_vprint (line 43) | int wcdb_log_vprint(int prio, const char *tag, const char *fmt, va_list ap)
function wcdb_log_print (line 50) | int wcdb_log_print(int prio, const char *tag, const char *fmt, ...)
FILE: deprecated/android/jni/Logger.h
function wcdb_log_write (line 43) | inline static int wcdb_log_write(int prio, const char *tag, const char *...
FILE: deprecated/android/jni/ModuleLoader.c
type wcdb_moddef_t (line 31) | typedef struct wcdb_moddef_t {
function register_module_func (line 40) | void register_module_func(const char *name, void *func, unsigned tag)
function JNICALL (line 58) | JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
function JNICALL (line 80) | JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)
function wcdb_init_destroy (line 95) | static void __attribute__((destructor)) wcdb_init_destroy()
FILE: deprecated/android/jni/ModuleLoader.h
type sqlite3 (line 24) | typedef struct sqlite3 sqlite3;
type wcdb_inittag_t (line 26) | typedef enum wcdb_inittag_t {
FILE: deprecated/android/jni/Mutex.h
function namespace (line 28) | namespace wcdb {
function Mutex (line 79) | inline Mutex::Mutex()
function Mutex (line 84) | inline Mutex::Mutex(const char *name)
function Mutex (line 89) | inline Mutex::Mutex(int type, const char *name)
function Mutex (line 102) | inline Mutex::~Mutex()
function status_t (line 107) | inline status_t Mutex::lock()
function unlock (line 112) | inline void Mutex::unlock()
function status_t (line 117) | inline status_t Mutex::tryLock()
type Mutex (line 129) | typedef Mutex::Autolock AutoMutex;
FILE: deprecated/android/jni/SQLiteCommon.cpp
type wcdb (line 21) | namespace wcdb {
function throw_sqlite3_exception (line 26) | void throw_sqlite3_exception(JNIEnv *env, sqlite3 *handle)
function throw_sqlite3_exception (line 32) | void throw_sqlite3_exception(JNIEnv *env, const char *message)
function throw_sqlite3_exception (line 41) | void throw_sqlite3_exception(JNIEnv *env, sqlite3 *handle, const char ...
function throw_sqlite3_exception_errcode (line 63) | void throw_sqlite3_exception_errcode(JNIEnv *env,
function throw_sqlite3_exception (line 74) | void throw_sqlite3_exception(JNIEnv *env,
function throw_sqlite3_exception (line 86) | void throw_sqlite3_exception(JNIEnv *env,
function throw_sqlite3_exception_format (line 175) | void throw_sqlite3_exception_format(JNIEnv *env,
FILE: deprecated/android/jni/SQLiteCommon.h
function namespace (line 30) | namespace wcdb {
FILE: deprecated/android/jni/Unicode.cpp
function utf32_codepoint_utf8_length (line 80) | static inline size_t utf32_codepoint_utf8_length(uint32_t srcChar)
function utf32_codepoint_to_utf8 (line 107) | static inline void
function strlen32 (line 126) | size_t strlen32(const uint32_t *s)
function strnlen32 (line 134) | size_t strnlen32(const uint32_t *s, size_t maxlen)
function utf32_at_internal (line 144) | static inline int32_t utf32_at_internal(const char *cur, size_t *num_read)
function utf32_from_utf8_at (line 168) | int32_t utf32_from_utf8_at(const char *src,
function utf32_to_utf8_length (line 189) | ssize_t utf32_to_utf8_length(const uint32_t *src, size_t src_len)
function utf32_to_utf8 (line 203) | void utf32_to_utf8(const uint32_t *src, size_t src_len, char *dst)
function strcmp16 (line 224) | int strcmp16(const uint16_t *s1, const uint16_t *s2)
function strncmp16 (line 238) | int strncmp16(const uint16_t *s1, const uint16_t *s2, size_t n)
function strlen16 (line 265) | size_t strlen16(const uint16_t *s)
function strnlen16 (line 291) | size_t strnlen16(const uint16_t *s, size_t maxlen)
function strzcmp16 (line 304) | int strzcmp16(const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2)
function strzcmp16_h_n (line 319) | int strzcmp16_h_n(const uint16_t *s1H,
function utf16_to_utf8 (line 339) | void utf16_to_utf8(const uint16_t *src, size_t src_len, char *dst)
function utf8_length (line 369) | ssize_t utf8_length(const char *src)
function utf16_to_utf8_length (line 412) | ssize_t utf16_to_utf8_length(const uint16_t *src, size_t src_len)
function utf8_codepoint_len (line 442) | static inline size_t utf8_codepoint_len(uint8_t ch)
function utf8_shift_and_mask (line 447) | static inline void utf8_shift_and_mask(uint32_t *codePoint, const uint8_...
function utf8_to_utf32_length (line 453) | size_t utf8_to_utf32_length(const char *src, size_t src_len)
function utf8_to_utf32 (line 477) | void utf8_to_utf32(const char *src, size_t src_len, uint32_t *dst)
function utf8_to_utf32_codepoint (line 494) | static inline uint32_t utf8_to_utf32_codepoint(const uint8_t *src,
function utf8_to_utf16_length (line 524) | ssize_t utf8_to_utf16_length(const uint8_t *u8str, size_t u8len)
function utf8_to_utf16 (line 579) | void utf8_to_utf16(const uint8_t *u8str, size_t u8len, uint16_t *u16str)
FILE: deprecated/android/jni/com_tencent_wcdb_CursorWindow.cpp
type wcdb (line 40) | namespace wcdb {
function throwExceptionWithRowCol (line 47) | static void throwExceptionWithRowCol(JNIEnv *env, jint row, jint column)
function throwUnknownTypeException (line 58) | static void throwUnknownTypeException(JNIEnv *env, jint type)
function jlong (line 65) | static jlong
function nativeDispose (line 81) | static void nativeDispose(JNIEnv *env, jclass clazz, jlong windowPtr)
function nativeClear (line 90) | static void nativeClear(JNIEnv *env, jclass clazz, jlong windowPtr)
function jint (line 100) | static jint nativeGetNumRows(JNIEnv *env, jclass clazz, jlong windowPtr)
function jboolean (line 106) | static jboolean
function jboolean (line 114) | static jboolean nativeAllocRow(JNIEnv *env, jclass clazz, jlong window...
function nativeFreeLastRow (line 121) | static void nativeFreeLastRow(JNIEnv *env, jclass clazz, jlong windowPtr)
function jint (line 127) | static jint
function jbyteArray (line 142) | static jbyteArray
function jstring (line 180) | static jstring nativeGetString(
function jcharArray (line 235) | static jcharArray
function fillCharArrayBufferUTF (line 261) | static void fillCharArrayBufferUTF(JNIEnv *env,
function clearCharArrayBuffer (line 285) | static void clearCharArrayBuffer(JNIEnv *env, jobject bufferObj)
function nativeCopyStringToBuffer (line 293) | static void nativeCopyStringToBuffer(JNIEnv *env,
function jlong (line 339) | static jlong
function jdouble (line 372) | static jdouble nativeGetDouble(
function jboolean (line 405) | static jboolean nativePutBlob(JNIEnv *env,
function jboolean (line 428) | static jboolean nativePutString(JNIEnv *env,
function jboolean (line 456) | static jboolean nativePutLong(JNIEnv *env,
function jboolean (line 475) | static jboolean nativePutDouble(JNIEnv *env,
function jboolean (line 494) | static jboolean
function register_wcdb_CursorWindow (line 532) | static int register_wcdb_CursorWindow(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_FileUtils.cpp
type wcdb (line 28) | namespace wcdb {
function jint (line 30) | jint android_os_FileUtils_setPermissions(
function register_wcdb_FileUtils (line 58) | static int register_wcdb_FileUtils(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_database_ChunkedCursorWindow.cpp
type wcdb (line 38) | namespace wcdb {
function throwExceptionWithRowCol (line 40) | static void throwExceptionWithRowCol(JNIEnv *env, jint row, jint column)
function throwUnknownTypeException (line 49) | static void throwUnknownTypeException(JNIEnv *env, jint type)
function jlong (line 59) | static jlong nativeCreate(JNIEnv *env, jclass cls, jint capacity)
function nativeDispose (line 74) | static void nativeDispose(JNIEnv *env, jclass cls, jlong windowPtr)
function nativeClear (line 82) | static void nativeClear(JNIEnv *env, jclass cls, jlong windowPtr)
function jlong (line 92) | static jlong
function jint (line 105) | static jint nativeGetNumChunks(JNIEnv *env, jclass cls, jlong windowPtr)
function jboolean (line 111) | static jboolean
function jlong (line 120) | static jlong nativeGetRow(JNIEnv *env, jclass cls, jlong windowPtr, ji...
function nativeEndRow (line 131) | static void nativeEndRow(JNIEnv *env, jclass cls, jlong windowPtr, jlo...
function jint (line 140) | static jint nativeGetType(JNIEnv *env, jclass cls, jlong rowPtr, jint ...
function jbyteArray (line 154) | static jbyteArray
function jstring (line 192) | static jstring
function jlong (line 248) | static jlong nativeGetLong(JNIEnv *env, jclass cls, jlong rowPtr, jint...
function jdouble (line 279) | static jdouble
function status_t (line 314) | static status_t copyRow(sqlite3_stmt *statement,
function jint (line 378) | static jint nativeFillRows(JNIEnv *env,
function jint (line 455) | static jint nativeCount(JNIEnv *env, jclass cls, jlong statementPtr)
function jint (line 492) | static jint register_wcdb_ChunkedCursorWindow(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_database_SQLiteConnection.cpp
type wcdb (line 41) | namespace wcdb {
type SQLiteConnection (line 75) | struct SQLiteConnection {
type NotificationKey (line 93) | struct NotificationKey {
method NotificationKey (line 97) | NotificationKey(const char *d_, const char *t_) : table(t_), db(d_...
type NotificationItem (line 109) | struct NotificationItem {
method NotificationItem (line 115) | NotificationItem(sqlite_int64 r_, int op_) : rowid(r_), op(op_) {}
type NotificationItems (line 124) | struct NotificationItems {
method NotificationItems (line 128) | NotificationItems() : numNotify{0, 0, 0} {}
method SQLiteConnection (line 141) | SQLiteConnection(jobject dbObj, sqlite3 *db, int openFlags)
function toNotifyOp (line 156) | static inline int toNotifyOp(int op)
function sqliteUpdateHookCallback (line 170) | static void sqliteUpdateHookCallback(void *ud,
function mergeOp (line 211) | static inline int mergeOp(int op1, int op2)
function sqliteCommitHookCallback (line 219) | static int sqliteCommitHookCallback(void *ud)
function sqliteRollbackHookCallback (line 262) | static void sqliteRollbackHookCallback(void *ud)
function emitUpdateNotifications (line 274) | static void emitUpdateNotifications(JNIEnv *env, SQLiteConnection *conn)
function sqliteProgressHandlerCallback (line 332) | static int sqliteProgressHandlerCallback(void *data)
function sqliteWalHookCallback (line 339) | static int
function nativeSetKey (line 371) | static void
function jlong (line 401) | static jlong nativeOpen(JNIEnv *env,
function nativeClose (line 470) | static void nativeClose(JNIEnv *env, jclass clazz, jlong connectionPtr)
function sqliteCustomFunctionCallback (line 490) | static void sqliteCustomFunctionCallback(sqlite3_context *context,
function sqliteCustomFunctionDestructor (line 542) | static void sqliteCustomFunctionDestructor(void *data)
function nativeRegisterCustomFunction (line 550) | static void nativeRegisterCustomFunction(JNIEnv *env,
function nativeRegisterLocalizedCollators (line 581) | static void nativeRegisterLocalizedCollators(JNIEnv *env,
function jlong (line 598) | static jlong nativePrepareStatement(JNIEnv *env,
function nativeFinalizeStatement (line 636) | static void nativeFinalizeStatement(JNIEnv *env,
function jint (line 650) | static jint nativeGetParameterCount(JNIEnv *env,
function jboolean (line 660) | static jboolean nativeIsReadOnly(JNIEnv *env,
function jint (line 670) | static jint nativeGetColumnCount(JNIEnv *env,
function jstring (line 680) | static jstring nativeGetColumnName(JNIEnv *env,
function nativeBindNull (line 700) | static void nativeBindNull(JNIEnv *env,
function nativeBindLong (line 716) | static void nativeBindLong(JNIEnv *env,
function nativeBindDouble (line 733) | static void nativeBindDouble(JNIEnv *env,
function nativeBindString (line 750) | static void nativeBindString(JNIEnv *env,
function nativeBindBlob (line 771) | static void nativeBindBlob(JNIEnv *env,
function nativeResetStatement (line 793) | static void nativeResetStatement(JNIEnv *env,
function executeNonQuery (line 812) | static int executeNonQuery(JNIEnv *env,
function nativeExecute (line 830) | static void nativeExecute(JNIEnv *env,
function jint (line 841) | static jint nativeExecuteForChangedRowCount(JNIEnv *env,
function jlong (line 853) | static jlong nativeExecuteForLastInsertedRowId(JNIEnv *env,
function executeOneRowQuery (line 867) | static int executeOneRowQuery(JNIEnv *env,
function jlong (line 880) | static jlong nativeExecuteForLong(JNIEnv *env,
function jstring (line 896) | static jstring nativeExecuteForString(JNIEnv *env,
type CopyRowResult (line 915) | enum CopyRowResult {
function CopyRowResult (line 921) | static CopyRowResult copyRow(JNIEnv *env,
function jlong (line 1022) | static jlong nativeExecuteForCursorWindow(JNIEnv *env,
function jint (line 1138) | static jint nativeGetDbLookaside(JNIEnv *env, jclass clazz, jlong conn...
function nativeCancel (line 1149) | static void nativeCancel(JNIEnv *env, jclass clazz, jlong connectionPt...
function nativeResetCancel (line 1155) | static void nativeResetCancel(JNIEnv *env,
function nativeSetWalHook (line 1172) | static void nativeSetWalHook(JNIEnv *env, jclass clazz, jlong connecti...
function jlong (line 1180) | static jlong nativeWalCheckpoint(JNIEnv *env,
function jlong (line 1205) | static jlong nativeSQLiteHandle(JNIEnv *env,
function nativeSetUpdateNotification (line 1234) | static void nativeSetUpdateNotification(JNIEnv *env,
function register_wcdb_SQLiteConnection (line 1306) | static int register_wcdb_SQLiteConnection(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_database_SQLiteDebug.cpp
type wcdb (line 32) | namespace wcdb {
function nativeGetPagerStats (line 42) | static void nativeGetPagerStats(JNIEnv *env, jobject clazz, jobject st...
function jint (line 62) | static jint nativeGetLastErrorLine(JNIEnv *env, jclass cls)
function nativeSetIOTraceFlags (line 67) | static void nativeSetIOTraceFlags(JNIEnv *env, jclass cls, jint flags)
function nativeGetIOTraceStats (line 72) | static void nativeGetIOTraceStats(JNIEnv *env,
function register_wcdb_SQLiteDebug (line 332) | static int register_wcdb_SQLiteDebug(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_database_SQLiteDirectQuery.cpp
type wcdb (line 28) | namespace wcdb {
function jlong (line 30) | static jlong
function jdouble (line 37) | static jdouble
function jstring (line 44) | static jstring
function jbyteArray (line 55) | static jbyteArray
function jint (line 68) | static jint
function jint (line 75) | static jint nativeStep(JNIEnv *env, jclass cls, jlong statementPtr, ji...
function jint (line 103) | static jint register_wcdb_SQLiteDirectQuery(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_database_SQLiteGlobal.cpp
type wcdb (line 39) | namespace wcdb {
function sqliteLogCallback (line 51) | static void sqliteLogCallback(void *data, int iErrCode, const char *zMsg)
function sqliteExtensionApiStealer (line 90) | static int sqliteExtensionApiStealer(sqlite3 *db, const char **pzErrMsg,
function sqliteInitialize (line 121) | static void sqliteInitialize()
function jint (line 146) | static jint nativeReleaseMemory(JNIEnv *env, jclass clazz)
function nativeInitialize (line 151) | static void nativeInitialize(JNIEnv *env, jclass clazz, jint pageSize)
function register_wcdb_SQLiteGlobal (line 170) | static int register_wcdb_SQLiteGlobal(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_extension_fts_MMFtsTokenizer.cpp
function SQLITE_EXTENSION_INIT3 (line 27) | SQLITE_EXTENSION_INIT3
FILE: deprecated/android/jni/com_tencent_wcdb_repair_Backup.cpp
type wcdb (line 29) | namespace wcdb {
function print_xlog (line 31) | static void print_xlog(int prio, const char *msg)
function jlong (line 44) | static jlong JNICALL BackupKit_nativeInit(
function jint (line 68) | static jint JNICALL BackupKit_nativeRun(JNIEnv *env,
function BackupKit_nativeCancel (line 121) | static void JNICALL BackupKit_nativeCancel(JNIEnv *env,
function BackupKit_nativeFinish (line 129) | static void JNICALL BackupKit_nativeFinish(JNIEnv *env,
function jint (line 137) | static jint JNICALL
function jstring (line 146) | static jstring
function jlong (line 154) | static jlong JNICALL RecoverKit_nativeInit(JNIEnv *env,
function jint (line 179) | static jint JNICALL RecoverKit_nativeRun(
function RecoverKit_nativeCancel (line 188) | static void JNICALL RecoverKit_nativeCancel(JNIEnv *env,
function RecoverKit_nativeFinish (line 196) | static void JNICALL RecoverKit_nativeFinish(JNIEnv *env,
function jint (line 204) | static jint JNICALL RecoverKit_nativeSuccessCount(JNIEnv *env,
function jint (line 214) | static jint JNICALL RecoverKit_nativeFailureCount(JNIEnv *env,
function jstring (line 224) | static jstring
function register_wcdb_repair_backup (line 253) | static int register_wcdb_repair_backup(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_repair_DBDumpUtil.cpp
type wcdb (line 34) | namespace wcdb {
type previous_mode_data (line 36) | struct previous_mode_data {
type callback_data (line 48) | struct callback_data {
type previous_mode_data (line 65) | struct previous_mode_data
function run_table_dump_query (line 132) | int run_table_dump_query(
function dump_callback (line 189) | int dump_callback(void *pArg, int nArg, char **azArg, char **azCol)
function run_schema_dump_query (line 284) | int run_schema_dump_query(struct callback_data *p, const char *zQuery)
function open_db (line 318) | int open_db(struct callback_data *p, const char *key)
function run_command_db_dump (line 350) | int run_command_db_dump(const char *dbPath,
function jboolean (line 435) | static jboolean JNICALL nativeDumpDB(JNIEnv *env,
function jboolean (line 457) | static jboolean nativeIsSqlComplete(JNIEnv *env, jclass clazz, jstring...
function register_wcdb_DBDumpUtil (line 473) | static int register_wcdb_DBDumpUtil(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_repair_RepairKit.cpp
type wcdb (line 36) | namespace wcdb {
function sqliterk_cipher_conf (line 40) | static sqliterk_cipher_conf *parseCipherSpec(JNIEnv *env, jobject ciph...
function JNICALL (line 86) | static JNICALL jlong nativeInit(JNIEnv *env,
function JNICALL (line 129) | static JNICALL void nativeFini(JNIEnv *env, jclass cls, jlong rkPtr)
type callback_data (line 135) | struct callback_data {
function output_callback (line 142) | static int output_callback(void *user, sqliterk *rk, sqliterk_table *t...
function JNICALL (line 170) | static JNICALL jint nativeOutput(JNIEnv *env,
function JNICALL (line 195) | static JNICALL void nativeCancel(JNIEnv *env, jclass cls, jlong rkPtr)
function JNICALL (line 201) | static JNICALL jint nativeIntegrityFlags(JNIEnv *env, jclass cls, jlon...
function JNICALL (line 207) | static JNICALL jstring nativeLastError(JNIEnv *env, jclass cls)
function JNICALL (line 212) | static JNICALL jintArray nativeGetStatistics(JNIEnv *env, jclass cls, ...
function JNICALL (line 227) | static JNICALL jlong nativeMakeMaster(JNIEnv *env,
function JNICALL (line 254) | static JNICALL jboolean nativeSaveMaster(
function JNICALL (line 277) | static JNICALL jlong nativeLoadMaster(JNIEnv *env,
function JNICALL (line 337) | static JNICALL void nativeFreeMaster(JNIEnv *env, jclass cls, jlong ma...
function JNICALL (line 346) | static JNICALL jlong nativeScanLeaf(JNIEnv *env, jclass cls, jlong dbP...
function JNICALL (line 385) | static JNICALL void nativeCancelScanLeaf(JNIEnv *env, jclass cls, jlon...
function JNICALL (line 389) | static JNICALL jboolean nativeSaveLeaf(JNIEnv *env, jclass cls, jlong ...
function JNICALL (line 399) | static JNICALL jlong nativeLoadLeaf(JNIEnv *env, jclass cls, jstring p...
function JNICALL (line 409) | static JNICALL void nativeFreeLeaf(JNIEnv *env, jclass cls, jlong leaf...
function JNICALL (line 413) | static JNICALL jint cursorNativeGetColumnCount(JNIEnv *env, jclass, jl...
function JNICALL (line 419) | static JNICALL jint cursorNativeGetType(JNIEnv *env, jclass, jlong ptr...
function JNICALL (line 425) | static JNICALL jlong cursorNativeGetLong(JNIEnv *env, jclass, jlong pt...
function JNICALL (line 431) | static JNICALL double cursorNativeGetDouble(JNIEnv *env, jclass, jlong...
function JNICALL (line 437) | static JNICALL jstring cursorNativeGetString(JNIEnv *env, jclass, jlon...
function JNICALL (line 446) | static JNICALL jbyteArray cursorNativeGetBlob(JNIEnv *env, jclass, jlo...
function xlog (line 487) | static void xlog(sqliterk_loglevel level, int result, const char *msg)
function register_wcdb_repair (line 514) | static int register_wcdb_repair(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/jni/com_tencent_wcdb_support_Log.cpp
type wcdb (line 30) | namespace wcdb {
function jniCallbackLogger (line 41) | static int jniCallbackLogger(int priority, const char *tag, const char...
function nativeSetLogger (line 68) | static void
function nativePrintLn (line 89) | static void nativePrintLn(
function register_wcdb_Log (line 109) | static int register_wcdb_Log(JavaVM *vm, JNIEnv *env)
function unregister_wcdb_Log (line 127) | static int unregister_wcdb_Log(JavaVM *vm, JNIEnv *env)
FILE: deprecated/android/room/src/main/java/com/tencent/wcdb/room/db/WCDBDatabase.java
class WCDBDatabase (line 46) | public class WCDBDatabase implements SupportSQLiteDatabase {
method WCDBDatabase (line 58) | public WCDBDatabase(SQLiteDatabase delegate) {
method getInnerDatabase (line 67) | public final SQLiteDatabase getInnerDatabase() {
method compileStatement (line 71) | @Override
method beginTransaction (line 76) | @Override
method beginTransactionNonExclusive (line 81) | @Override
method beginTransactionWithListener (line 86) | @Override
method beginTransactionWithListenerNonExclusive (line 91) | @Override
method endTransaction (line 97) | @Override
method setTransactionSuccessful (line 102) | @Override
method inTransaction (line 107) | @Override
method isDbLockedByCurrentThread (line 112) | @Override
method yieldIfContendedSafely (line 117) | @Override
method yieldIfContendedSafely (line 122) | @Override
method getVersion (line 127) | @Override
method setVersion (line 132) | @Override
method getMaximumSize (line 137) | @Override
method setMaximumSize (line 142) | @Override
method getPageSize (line 147) | @Override
method setPageSize (line 152) | @Override
method query (line 157) | @Override
method query (line 162) | @Override
method query (line 168) | @Override
method query (line 186) | @Override
method insert (line 225) | @Override
method delete (line 232) | @Override
method update (line 242) | @Override
method execSQL (line 280) | @Override
method execSQL (line 285) | @Override
method isReadOnly (line 290) | @Override
method isOpen (line 295) | @Override
method needUpgrade (line 300) | @Override
method getPath (line 305) | @Override
method setLocale (line 310) | @Override
method setMaxSqlCacheSize (line 315) | @Override
method setForeignKeyConstraintsEnabled (line 320) | @Override
method enableWriteAheadLogging (line 326) | @Override
method disableWriteAheadLogging (line 331) | @Override
method isWriteAheadLoggingEnabled (line 337) | @Override
method getAttachedDbs (line 343) | @Override
method isDatabaseIntegrityOk (line 348) | @Override
method close (line 353) | @Override
method isEmpty (line 358) | private static boolean isEmpty(String input) {
FILE: deprecated/android/room/src/main/java/com/tencent/wcdb/room/db/WCDBOpenHelper.java
class WCDBOpenHelper (line 28) | class WCDBOpenHelper implements SupportSQLiteOpenHelper {
method WCDBOpenHelper (line 31) | WCDBOpenHelper(Context context, String name, byte[] passphrase, SQLite...
method createDelegate (line 36) | private OpenHelper createDelegate(Context context, String name, byte[]...
method getDatabaseName (line 42) | @Override
method setWriteAheadLoggingEnabled (line 47) | @Override
method setAsyncCheckpointEnabled (line 52) | void setAsyncCheckpointEnabled(boolean enabled) {
method getWritableDatabase (line 56) | @Override
method getReadableDatabase (line 61) | @Override
method close (line 66) | @Override
class OpenHelper (line 71) | static class OpenHelper extends SQLiteOpenHelper {
method OpenHelper (line 82) | OpenHelper(Context context, String name, final WCDBDatabase[] dbRef,
method getWritableSupportDatabase (line 100) | SupportSQLiteDatabase getWritableSupportDatabase() {
method getReadableSupportDatabase (line 105) | SupportSQLiteDatabase getReadableSupportDatabase() {
method getWrappedDb (line 110) | WCDBDatabase getWrappedDb(SQLiteDatabase sqLiteDatabase) {
method onCreate (line 119) | @Override
method onUpgrade (line 124) | @Override
method onConfigure (line 129) | @Override
method onDowngrade (line 135) | @Override
method onOpen (line 140) | @Override
method close (line 145) | @Override
FILE: deprecated/android/room/src/main/java/com/tencent/wcdb/room/db/WCDBOpenHelperFactory.java
class WCDBOpenHelperFactory (line 27) | public class WCDBOpenHelperFactory implements SupportSQLiteOpenHelper.Fa...
method passphrase (line 34) | public WCDBOpenHelperFactory passphrase(byte[] value) {
method cipherSpec (line 39) | public WCDBOpenHelperFactory cipherSpec(SQLiteCipherSpec cipher) {
method writeAheadLoggingEnabled (line 44) | public WCDBOpenHelperFactory writeAheadLoggingEnabled(boolean wal) {
method asyncCheckpointEnabled (line 49) | public WCDBOpenHelperFactory asyncCheckpointEnabled(boolean acp) {
method create (line 54) | @Override
FILE: deprecated/android/room/src/main/java/com/tencent/wcdb/room/db/WCDBProgram.java
class WCDBProgram (line 28) | class WCDBProgram implements SupportSQLiteProgram {
method WCDBProgram (line 31) | WCDBProgram(SQLiteProgram delegate) {
method bindNull (line 35) | @Override
method bindLong (line 40) | @Override
method bindDouble (line 45) | @Override
method bindString (line 50) | @Override
method bindBlob (line 55) | @Override
method clearBindings (line 60) | @Override
method close (line 65) | @Override
FILE: deprecated/android/room/src/main/java/com/tencent/wcdb/room/db/WCDBStatement.java
class WCDBStatement (line 28) | class WCDBStatement implements SupportSQLiteStatement {
method WCDBStatement (line 36) | public WCDBStatement(SQLiteStatement delegate) {
method bindNull (line 40) | @Override
method bindLong (line 45) | @Override
method bindDouble (line 50) | @Override
method bindString (line 55) | @Override
method bindBlob (line 60) | @Override
method clearBindings (line 65) | @Override
method execute (line 70) | @Override
method executeUpdateDelete (line 75) | @Override
method executeInsert (line 80) | @Override
method simpleQueryForLong (line 85) | @Override
method simpleQueryForString (line 90) | @Override
method close (line 95) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/ConcurrentTest.java
class ConcurrentTest (line 20) | public abstract class ConcurrentTest {
method createDB (line 25) | protected abstract void createDB(String path);
method closeDB (line 26) | protected abstract void closeDB();
method execSQL (line 27) | protected abstract void execSQL(String sql);
method execSQL (line 28) | protected abstract void execSQL(String sql, Object[] bindArgs);
method beginTransaction (line 29) | protected abstract void beginTransaction();
method setTransactionSuccessful (line 30) | protected abstract void setTransactionSuccessful();
method endTransaction (line 31) | protected abstract void endTransaction();
method longForQuery (line 32) | protected abstract long longForQuery(String sql, String[] selectionArgs);
method stringForQuery (line 33) | protected abstract String stringForQuery(String sql, String[] selectio...
method rawQuery (line 34) | protected abstract Cursor rawQuery(String sql, String[] selectionArgs);
method doBefore (line 39) | public void doBefore() {
class WriteOneByOneTask (line 56) | private class WriteOneByOneTask implements Runnable {
method WriteOneByOneTask (line 62) | WriteOneByOneTask(int from, int to, boolean transaction) {
method run (line 68) | @Override
class WriteBatchTask (line 92) | private class WriteBatchTask implements Runnable {
method WriteBatchTask (line 96) | WriteBatchTask(int from, int to) {
method run (line 101) | @Override
class ReadOneByOneTask (line 112) | private class ReadOneByOneTask implements Runnable {
method ReadOneByOneTask (line 117) | ReadOneByOneTask(int from, int to) {
method run (line 122) | @Override
class ReadBatchTask (line 140) | private class ReadBatchTask implements Runnable {
method ReadBatchTask (line 144) | ReadBatchTask(int from, int to) {
method run (line 149) | @Override
method submitTask (line 168) | private void submitTask(Runnable r) {
method waitUntilFinished (line 173) | private void waitUntilFinished() {
method doTest (line 184) | public void doTest() {
method doAfter (line 236) | public void doAfter() {
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/FrameworkConcurrentTest.java
class FrameworkConcurrentTest (line 33) | public class FrameworkConcurrentTest extends ConcurrentTest {
method doBefore (line 35) | @Override
method doAfter (line 41) | @Override
method doTest (line 47) | @Override
method createDB (line 56) | @Override
method closeDB (line 61) | @Override
method execSQL (line 67) | @Override
method execSQL (line 72) | @Override
method beginTransaction (line 77) | @Override
method setTransactionSuccessful (line 82) | @Override
method endTransaction (line 87) | @Override
method longForQuery (line 92) | @Override
method stringForQuery (line 97) | @Override
method rawQuery (line 102) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/FrameworkWalConcurrentTest.java
class FrameworkWalConcurrentTest (line 30) | public class FrameworkWalConcurrentTest extends FrameworkConcurrentTest {
method doBefore (line 32) | @Override
method doAfter (line 38) | @Override
method doTest (line 44) | @Override
method createDB (line 50) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/SQLCipherConcurrentTest.java
class SQLCipherConcurrentTest (line 35) | public class SQLCipherConcurrentTest extends ConcurrentTest {
method doBefore (line 37) | @Override
method doAfter (line 44) | @Override
method doTest (line 50) | @Override
method createDB (line 59) | @Override
method closeDB (line 64) | @Override
method execSQL (line 70) | @Override
method execSQL (line 75) | @Override
method beginTransaction (line 80) | @Override
method setTransactionSuccessful (line 85) | @Override
method endTransaction (line 90) | @Override
method longForQuery (line 95) | @Override
method stringForQuery (line 100) | @Override
method rawQuery (line 105) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/SQLCipherEncryptedConcurrentTest.java
class SQLCipherEncryptedConcurrentTest (line 29) | public class SQLCipherEncryptedConcurrentTest extends SQLCipherConcurren...
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/WCDBConcurrentTest.java
class WCDBConcurrentTest (line 34) | public class WCDBConcurrentTest extends ConcurrentTest {
method doBefore (line 36) | @Override
method doAfter (line 43) | @Override
method doTest (line 49) | @Override
method createDB (line 58) | @Override
method closeDB (line 63) | @Override
method execSQL (line 69) | @Override
method execSQL (line 74) | @Override
method beginTransaction (line 79) | @Override
method setTransactionSuccessful (line 84) | @Override
method endTransaction (line 89) | @Override
method longForQuery (line 94) | @Override
method stringForQuery (line 99) | @Override
method rawQuery (line 104) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/WCDBEncryptedConcurrentTest.java
class WCDBEncryptedConcurrentTest (line 29) | public class WCDBEncryptedConcurrentTest extends WCDBConcurrentTest {
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/WCDBWalConcurrentTest.java
class WCDBWalConcurrentTest (line 29) | public class WCDBWalConcurrentTest extends WCDBConcurrentTest {
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 49) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/concurrent/WCDBWalEncryptedConcurrentTest.java
class WCDBWalEncryptedConcurrentTest (line 29) | public class WCDBWalEncryptedConcurrentTest extends WCDBConcurrentTest {
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/FrameworkSingleThreadedTest.java
class FrameworkSingleThreadedTest (line 31) | public class FrameworkSingleThreadedTest extends SingleThreadedTest {
method doBefore (line 33) | @Override
method doAfter (line 39) | @Override
method doTest (line 45) | @Override
method createDB (line 54) | @Override
method closeDB (line 59) | @Override
method execSQL (line 65) | @Override
method execSQL (line 70) | @Override
method beginTransaction (line 75) | @Override
method setTransactionSuccessful (line 80) | @Override
method endTransaction (line 85) | @Override
method longForQuery (line 90) | @Override
method stringForQuery (line 95) | @Override
method rawQuery (line 100) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/FrameworkWalSingleThreadedTest.java
class FrameworkWalSingleThreadedTest (line 32) | public class FrameworkWalSingleThreadedTest extends FrameworkSingleThrea...
method doBefore (line 34) | @Override
method doAfter (line 40) | @Override
method doTest (line 46) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/SQLCipherEncryptedSingleThreadedTest.java
class SQLCipherEncryptedSingleThreadedTest (line 29) | public class SQLCipherEncryptedSingleThreadedTest extends SQLCipherSingl...
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/SQLCipherSingleThreadedTest.java
class SQLCipherSingleThreadedTest (line 33) | public class SQLCipherSingleThreadedTest extends SingleThreadedTest {
method doBefore (line 35) | @Override
method doAfter (line 42) | @Override
method doTest (line 48) | @Override
method createDB (line 57) | @Override
method closeDB (line 62) | @Override
method execSQL (line 68) | @Override
method execSQL (line 73) | @Override
method beginTransaction (line 78) | @Override
method setTransactionSuccessful (line 83) | @Override
method endTransaction (line 88) | @Override
method longForQuery (line 93) | @Override
method stringForQuery (line 98) | @Override
method rawQuery (line 103) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/SingleThreadedTest.java
class SingleThreadedTest (line 32) | public abstract class SingleThreadedTest {
method createDB (line 37) | protected abstract void createDB(String path);
method closeDB (line 38) | protected abstract void closeDB();
method execSQL (line 39) | protected abstract void execSQL(String sql);
method execSQL (line 40) | protected abstract void execSQL(String sql, Object[] bindArgs);
method beginTransaction (line 41) | protected abstract void beginTransaction();
method setTransactionSuccessful (line 42) | protected abstract void setTransactionSuccessful();
method endTransaction (line 43) | protected abstract void endTransaction();
method longForQuery (line 44) | protected abstract long longForQuery(String sql, String[] selectionArgs);
method stringForQuery (line 45) | protected abstract String stringForQuery(String sql, String[] selectio...
method rawQuery (line 46) | protected abstract Cursor rawQuery(String sql, String[] selectionArgs);
method doBefore (line 48) | public void doBefore() {
method doTest (line 68) | public void doTest() {
method doAfter (line 228) | public void doAfter() {
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/WCDBEncryptedSingleThreadedTest.java
class WCDBEncryptedSingleThreadedTest (line 29) | public class WCDBEncryptedSingleThreadedTest extends WCDBSingleThreadedT...
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/WCDBSingleThreadedTest.java
class WCDBSingleThreadedTest (line 33) | public class WCDBSingleThreadedTest extends SingleThreadedTest {
method doBefore (line 35) | @Override
method doAfter (line 42) | @Override
method doTest (line 48) | @Override
method createDB (line 57) | @Override
method closeDB (line 62) | @Override
method execSQL (line 68) | @Override
method execSQL (line 73) | @Override
method beginTransaction (line 78) | @Override
method setTransactionSuccessful (line 83) | @Override
method endTransaction (line 88) | @Override
method longForQuery (line 93) | @Override
method stringForQuery (line 98) | @Override
method rawQuery (line 103) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/WCDBWalAsyncCpSingleThreadedTest.java
class WCDBWalAsyncCpSingleThreadedTest (line 29) | public class WCDBWalAsyncCpSingleThreadedTest extends WCDBSingleThreaded...
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 49) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/WCDBWalEncryptedAsyncCpSingleThreadedTest.java
class WCDBWalEncryptedAsyncCpSingleThreadedTest (line 29) | public class WCDBWalEncryptedAsyncCpSingleThreadedTest extends WCDBSingl...
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/WCDBWalEncryptedSingleThreadedTest.java
class WCDBWalEncryptedSingleThreadedTest (line 29) | public class WCDBWalEncryptedSingleThreadedTest extends WCDBSingleThread...
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 52) | @Override
FILE: deprecated/android/samples/benchmark/src/androidTest/java/com/tencent/wcdb/benchmark/single/WCDBWalSingleThreadedTest.java
class WCDBWalSingleThreadedTest (line 29) | public class WCDBWalSingleThreadedTest extends WCDBSingleThreadedTest {
method doBefore (line 31) | @Override
method doAfter (line 37) | @Override
method doTest (line 43) | @Override
method createDB (line 49) | @Override
FILE: deprecated/android/samples/sample-encryptdb/src/androidTest/java/com/tencent/wcdb/sample/encryptdb/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: deprecated/android/samples/sample-encryptdb/src/main/java/com/tencent/wcdb/sample/encryptdb/EncryptedDBHelper.java
class EncryptedDBHelper (line 35) | public class EncryptedDBHelper extends SQLiteOpenHelper {
method EncryptedDBHelper (line 46) | public EncryptedDBHelper(Context context, String passphrase) {
method onCreate (line 57) | @Override
method onUpgrade (line 111) | @Override
method onConfigure (line 124) | @Override
FILE: deprecated/android/samples/sample-encryptdb/src/main/java/com/tencent/wcdb/sample/encryptdb/MainActivity.java
class MainActivity (line 38) | public class MainActivity extends AppCompatActivity {
method onCreate (line 50) | @Override
FILE: deprecated/android/samples/sample-encryptdb/src/main/java/com/tencent/wcdb/sample/encryptdb/PlainTextDBHelper.java
class PlainTextDBHelper (line 29) | public class PlainTextDBHelper extends SQLiteOpenHelper {
method PlainTextDBHelper (line 34) | public PlainTextDBHelper(Context context) {
method onCreate (line 40) | @Override
method onUpgrade (line 45) | @Override
FILE: deprecated/android/samples/sample-encryptdb/src/test/java/com/tencent/wcdb/sample/encryptdb/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: deprecated/android/samples/sample-persistence/src/androidTest/java/com/example/wcdb/sample/persistence/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: deprecated/android/samples/sample-persistence/src/main/java/com/example/wcdb/sample/persistence/MainActivity.java
class MainActivity (line 41) | public class MainActivity extends AppCompatActivity {
method onCreate (line 50) | @Override
FILE: deprecated/android/samples/sample-persistence/src/main/java/com/example/wcdb/sample/persistence/entity/AppDatabase.java
class AppDatabase (line 10) | @Database(entities = {User.class}, version = 1)
method userDao (line 12) | public abstract UserDao userDao();
FILE: deprecated/android/samples/sample-persistence/src/main/java/com/example/wcdb/sample/persistence/entity/User.java
class User (line 10) | @Entity
FILE: deprecated/android/samples/sample-persistence/src/main/java/com/example/wcdb/sample/persistence/entity/UserDao.java
type UserDao (line 15) | @Dao
method getAll (line 17) | @Query("SELECT * FROM user")
method getById (line 20) | @Query("SELECT * FROM user WHERE userId = :userId")
method insert (line 23) | @Insert
method delete (line 26) | @Delete
method update (line 29) | @Update
FILE: deprecated/android/samples/sample-persistence/src/test/java/com/example/wcdb/sample/persistence/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: deprecated/android/samples/sample-repairdb/src/androidTest/java/com/tencent/wcdb/sample/repairdb/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: deprecated/android/samples/sample-repairdb/src/main/java/com/tencent/wcdb/sample/repairdb/DBHelper.java
class DBHelper (line 31) | public class DBHelper extends SQLiteOpenHelper {
method onCorruption (line 50) | @Override
method DBHelper (line 56) | public DBHelper(Context context) {
method onCreate (line 62) | @Override
method onUpgrade (line 72) | @Override
FILE: deprecated/android/samples/sample-repairdb/src/main/java/com/tencent/wcdb/sample/repairdb/MainActivity.java
class MainActivity (line 48) | public class MainActivity extends Activity {
method onCreate (line 62) | @Override
FILE: deprecated/android/samples/sample-repairdb/src/test/java/com/tencent/wcdb/sample/repairdb/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
FILE: deprecated/android/samples/sample-room-with-a-view/src/androidTest/java/com/example/android/roomwordssample/LiveDataTestUtil.java
class LiveDataTestUtil (line 25) | public class LiveDataTestUtil {
method getValue (line 31) | public static <T> T getValue(final LiveData<T> liveData) throws Interr...
FILE: deprecated/android/samples/sample-room-with-a-view/src/androidTest/java/com/example/android/roomwordssample/WordDaoTest.java
class WordDaoTest (line 44) | @RunWith(AndroidJUnit4.class)
method createDb (line 53) | @Before
method closeDb (line 65) | @After
method insertAndGetWord (line 70) | @Test
method getAllWords (line 78) | @Test
method deleteAll (line 89) | @Test
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/MainActivity.java
class MainActivity (line 35) | public class MainActivity extends AppCompatActivity {
method onCreate (line 41) | @Override
method onActivityResult (line 78) | public void onActivityResult(int requestCode, int resultCode, Intent d...
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/NewWordActivity.java
class NewWordActivity (line 31) | public class NewWordActivity extends AppCompatActivity {
method onCreate (line 37) | @Override
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/Word.java
class Word (line 35) | @Entity(tableName = "word_table")
method Word (line 43) | public Word(@NonNull String word) {
method getWord (line 47) | @NonNull
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/WordDao.java
type WordDao (line 35) | @Dao
method getAlphabetizedWords (line 42) | @Query("SELECT * from word_table ORDER BY word ASC")
method insert (line 48) | @Insert
method deleteAll (line 51) | @Query("DELETE FROM word_table")
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/WordListAdapter.java
class WordListAdapter (line 30) | public class WordListAdapter extends RecyclerView.Adapter<WordListAdapte...
class WordViewHolder (line 32) | class WordViewHolder extends RecyclerView.ViewHolder {
method WordViewHolder (line 35) | private WordViewHolder(View itemView) {
method WordListAdapter (line 44) | WordListAdapter(Context context) {
method onCreateViewHolder (line 48) | @Override
method onBindViewHolder (line 54) | @Override
method setWords (line 60) | void setWords(List<Word> words) {
method getItemCount (line 65) | @Override
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/WordRepository.java
class WordRepository (line 30) | class WordRepository {
method WordRepository (line 39) | WordRepository(Application application) {
method getAllWords (line 47) | LiveData<List<Word>> getAllWords() {
method insert (line 54) | void insert(Word word) {
class insertAsyncTask (line 58) | private static class insertAsyncTask extends AsyncTask<Word, Void, Voi...
method insertAsyncTask (line 62) | insertAsyncTask(WordDao dao) {
method doInBackground (line 66) | @Override
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/WordRoomDatabase.java
class WordRoomDatabase (line 35) | @Database(entities = {Word.class}, version = 1)
method wordDao (line 38) | public abstract WordDao wordDao();
method getDatabase (line 43) | static WordRoomDatabase getDatabase(final Context context) {
method onOpen (line 88) | @Override
class PopulateDbAsync (line 101) | private static class PopulateDbAsync extends AsyncTask<Void, Void, Voi...
method PopulateDbAsync (line 105) | PopulateDbAsync(WordRoomDatabase db) {
method doInBackground (line 109) | @Override
FILE: deprecated/android/samples/sample-room-with-a-view/src/main/java/com/example/android/roomwordssample/WordViewModel.java
class WordViewModel (line 30) | public class WordViewModel extends AndroidViewModel {
method WordViewModel (line 39) | public WordViewModel(Application application) {
method getAllWords (line 45) | LiveData<List<Word>> getAllWords() {
method insert (line 49) | void insert(Word word) {
FILE: deprecated/android/sqlcipher/sqlcipher.h
type sqlcipher_provider (line 54) | typedef struct {
FILE: deprecated/android/sqlcipher/sqlite3.c
function SQLITE_PRIVATE (line 787) | SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt){
type sqlite3 (line 1285) | typedef struct sqlite3 sqlite3;
type SQLITE_INT64_TYPE (line 1304) | typedef SQLITE_INT64_TYPE sqlite_int64;
type SQLITE_UINT64_TYPE (line 1306) | typedef SQLITE_UINT64_TYPE sqlite_uint64;
type sqlite_uint64 (line 1308) | typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
type __int64 (line 1311) | typedef __int64 sqlite_int64;
type sqlite_uint64 (line 1312) | typedef unsigned __int64 sqlite_uint64;
type sqlite_int64 (line 1314) | typedef long long int sqlite_int64;
type sqlite_uint64 (line 1315) | typedef unsigned long long int sqlite_uint64;
type sqlite_int64 (line 1317) | typedef sqlite_int64 sqlite3_int64;
type sqlite_uint64 (line 1318) | typedef sqlite_uint64 sqlite3_uint64;
type sqlite3_file (line 1714) | typedef struct sqlite3_file sqlite3_file;
type sqlite3_file (line 1715) | struct sqlite3_file {
type sqlite3_io_methods (line 1813) | typedef struct sqlite3_io_methods sqlite3_io_methods;
type sqlite3_io_methods (line 1814) | struct sqlite3_io_methods {
type sqlite3_mutex (line 2201) | typedef struct sqlite3_mutex sqlite3_mutex;
type sqlite3_api_routines (line 2211) | typedef struct sqlite3_api_routines sqlite3_api_routines;
type sqlite3_vfs (line 2376) | typedef struct sqlite3_vfs sqlite3_vfs;
type sqlite3_vfs (line 2378) | struct sqlite3_vfs {
type sqlite3_mem_methods (line 2674) | typedef struct sqlite3_mem_methods sqlite3_mem_methods;
type sqlite3_mem_methods (line 2675) | struct sqlite3_mem_methods {
type sqlite3_stmt (line 4562) | typedef struct sqlite3_stmt sqlite3_stmt;
type sqlite3_value (line 4998) | typedef struct sqlite3_value sqlite3_value;
type sqlite3_context (line 5012) | typedef struct sqlite3_context sqlite3_context;
type sqlite3_vtab (line 7351) | typedef struct sqlite3_vtab sqlite3_vtab;
type sqlite3_index_info (line 7352) | typedef struct sqlite3_index_info sqlite3_index_info;
type sqlite3_vtab_cursor (line 7353) | typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
type sqlite3_module (line 7354) | typedef struct sqlite3_module sqlite3_module;
type sqlite3_module (line 7372) | struct sqlite3_module {
type sqlite3_index_info (line 7506) | struct sqlite3_index_info {
type sqlite3_vtab (line 7629) | struct sqlite3_vtab {
type sqlite3_vtab_cursor (line 7653) | struct sqlite3_vtab_cursor {
type sqlite3_blob (line 7709) | typedef struct sqlite3_blob sqlite3_blob;
type sqlite3_mutex_methods (line 8157) | typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
type sqlite3_mutex_methods (line 8158) | struct sqlite3_mutex_methods {
type sqlite3_str (line 8410) | typedef struct sqlite3_str sqlite3_str;
type sqlite3_pcache (line 8891) | typedef struct sqlite3_pcache sqlite3_pcache;
type sqlite3_pcache_page (line 8903) | typedef struct sqlite3_pcache_page sqlite3_pcache_page;
type sqlite3_pcache_page (line 8904) | struct sqlite3_pcache_page {
type sqlite3_pcache_methods2 (line 9068) | typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
type sqlite3_pcache_methods2 (line 9069) | struct sqlite3_pcache_methods2 {
type sqlite3_pcache_methods (line 9091) | typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
type sqlite3_pcache_methods (line 9092) | struct sqlite3_pcache_methods {
type sqlite3_backup (line 9117) | typedef struct sqlite3_backup sqlite3_backup;
type sqlite3_snapshot (line 10110) | typedef struct sqlite3_snapshot {
type sqlite3_rtree_geometry (line 10437) | typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
type sqlite3_rtree_query_info (line 10438) | typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info;
type sqlite3_int64 (line 10444) | typedef sqlite3_int64 sqlite3_rtree_dbl;
type sqlite3_rtree_dbl (line 10446) | typedef double sqlite3_rtree_dbl;
type sqlite3_rtree_geometry (line 10467) | struct sqlite3_rtree_geometry {
type sqlite3_rtree_query_info (line 10499) | struct sqlite3_rtree_query_info {
type sqlite3_session (line 10553) | typedef struct sqlite3_session sqlite3_session;
type sqlite3_changeset_iter (line 10561) | typedef struct sqlite3_changeset_iter sqlite3_changeset_iter;
type sqlite3_changegroup (line 11352) | typedef struct sqlite3_changegroup sqlite3_changegroup;
type sqlite3_rebaser (line 11916) | typedef struct sqlite3_rebaser sqlite3_rebaser;
type Fts5ExtensionApi (line 12232) | typedef struct Fts5ExtensionApi Fts5ExtensionApi;
type Fts5Context (line 12233) | typedef struct Fts5Context Fts5Context;
type Fts5PhraseIter (line 12234) | typedef struct Fts5PhraseIter Fts5PhraseIter;
type Fts5PhraseIter (line 12244) | struct Fts5PhraseIter {
type Fts5ExtensionApi (line 12460) | struct Fts5ExtensionApi {
type Fts5Tokenizer (line 12694) | typedef struct Fts5Tokenizer Fts5Tokenizer;
type fts5_tokenizer (line 12695) | typedef struct fts5_tokenizer fts5_tokenizer;
type fts5_tokenizer (line 12696) | struct fts5_tokenizer {
type fts5_api (line 12731) | typedef struct fts5_api fts5_api;
type fts5_api (line 12732) | struct fts5_api {
type Hash (line 13378) | typedef struct Hash Hash;
type HashElem (line 13379) | typedef struct HashElem HashElem;
type Hash (line 13402) | struct Hash {
type HashElem (line 13418) | struct HashElem {
type sqlite_int64 (line 13847) | typedef sqlite_int64 i64;
type sqlite_uint64 (line 13848) | typedef sqlite_uint64 u64;
type UINT32_TYPE (line 13849) | typedef UINT32_TYPE u32;
type UINT16_TYPE (line 13850) | typedef UINT16_TYPE u16;
type INT16_TYPE (line 13851) | typedef INT16_TYPE i16;
type UINT8_TYPE (line 13852) | typedef UINT8_TYPE u8;
type INT8_TYPE (line 13853) | typedef INT8_TYPE i8;
type u64 (line 13870) | typedef u64 tRowcnt;
type u32 (line 13872) | typedef u32 tRowcnt;
type INT16_TYPE (line 13898) | typedef INT16_TYPE LogEst;
type uptr (line 13918) | typedef uintptr_t uptr;
type u32 (line 13920) | typedef u32 uptr;
type u64 (line 13922) | typedef u64 uptr;
type BusyHandler (line 14083) | typedef struct BusyHandler BusyHandler;
type BusyHandler (line 14084) | struct BusyHandler {
type AggInfo (line 14178) | typedef struct AggInfo AggInfo;
type AuthContext (line 14179) | typedef struct AuthContext AuthContext;
type AutoincInfo (line 14180) | typedef struct AutoincInfo AutoincInfo;
type Bitvec (line 14181) | typedef struct Bitvec Bitvec;
type CollSeq (line 14182) | typedef struct CollSeq CollSeq;
type Column (line 14183) | typedef struct Column Column;
type Db (line 14184) | typedef struct Db Db;
type Schema (line 14185) | typedef struct Schema Schema;
type Expr (line 14186) | typedef struct Expr Expr;
type ExprList (line 14187) | typedef struct ExprList ExprList;
type FKey (line 14188) | typedef struct FKey FKey;
type FuncDestructor (line 14189) | typedef struct FuncDestructor FuncDestructor;
type FuncDef (line 14190) | typedef struct FuncDef FuncDef;
type FuncDefHash (line 14191) | typedef struct FuncDefHash FuncDefHash;
type IdList (line 14192) | typedef struct IdList IdList;
type Index (line 14193) | typedef struct Index Index;
type IndexSample (line 14194) | typedef struct IndexSample IndexSample;
type KeyClass (line 14195) | typedef struct KeyClass KeyClass;
type KeyInfo (line 14196) | typedef struct KeyInfo KeyInfo;
type Lookaside (line 14197) | typedef struct Lookaside Lookaside;
type LookasideSlot (line 14198) | typedef struct LookasideSlot LookasideSlot;
type Module (line 14199) | typedef struct Module Module;
type NameContext (line 14200) | typedef struct NameContext NameContext;
type Parse (line 14201) | typedef struct Parse Parse;
type PreUpdate (line 14202) | typedef struct PreUpdate PreUpdate;
type PrintfArguments (line 14203) | typedef struct PrintfArguments PrintfArguments;
type RenameToken (line 14204) | typedef struct RenameToken RenameToken;
type RowSet (line 14205) | typedef struct RowSet RowSet;
type Savepoint (line 14206) | typedef struct Savepoint Savepoint;
type Select (line 14207) | typedef struct Select Select;
type SQLiteThread (line 14208) | typedef struct SQLiteThread SQLiteThread;
type SelectDest (line 14209) | typedef struct SelectDest SelectDest;
type SrcList (line 14210) | typedef struct SrcList SrcList;
type StrAccum (line 14211) | typedef struct sqlite3_str StrAccum;
type Table (line 14212) | typedef struct Table Table;
type TableLock (line 14213) | typedef struct TableLock TableLock;
type Token (line 14214) | typedef struct Token Token;
type TreeView (line 14215) | typedef struct TreeView TreeView;
type Trigger (line 14216) | typedef struct Trigger Trigger;
type TriggerPrg (line 14217) | typedef struct TriggerPrg TriggerPrg;
type TriggerStep (line 14218) | typedef struct TriggerStep TriggerStep;
type UnpackedRecord (line 14219) | typedef struct UnpackedRecord UnpackedRecord;
type Upsert (line 14220) | typedef struct Upsert Upsert;
type VTable (line 14221) | typedef struct VTable VTable;
type VtabCtx (line 14222) | typedef struct VtabCtx VtabCtx;
type Walker (line 14223) | typedef struct Walker Walker;
type WhereInfo (line 14224) | typedef struct WhereInfo WhereInfo;
type Window (line 14225) | typedef struct Window Window;
type With (line 14226) | typedef struct With With;
type SQLITE_BITMASK_TYPE (line 14237) | typedef SQLITE_BITMASK_TYPE Bitmask;
type u64 (line 14239) | typedef u64 Bitmask;
type VList (line 14260) | typedef int VList;
type Btree (line 14307) | typedef struct Btree Btree;
type BtCursor (line 14308) | typedef struct BtCursor BtCursor;
type BtShared (line 14309) | typedef struct BtShared BtShared;
type BtreePayload (line 14310) | typedef struct BtreePayload BtreePayload;
type KeyInfo (line 14498) | struct KeyInfo
type BtreePayload (line 14559) | struct BtreePayload {
type Vdbe (line 14694) | typedef struct Vdbe Vdbe;
type Mem (line 14700) | typedef struct sqlite3_value Mem;
type SubProgram (line 14701) | typedef struct SubProgram SubProgram;
type VdbeOp (line 14708) | struct VdbeOp {
type VdbeOp (line 14747) | typedef struct VdbeOp VdbeOp;
type SubProgram (line 14753) | struct SubProgram {
type VdbeOpList (line 14767) | struct VdbeOpList {
type VdbeOpList (line 14773) | typedef struct VdbeOpList VdbeOpList;
type u32 (line 15312) | typedef u32 Pgno;
type Pager (line 15317) | typedef struct Pager Pager;
type DbPage (line 15322) | typedef struct PgHdr DbPage;
type PgHdr (line 15549) | typedef struct PgHdr PgHdr;
type PCache (line 15550) | typedef struct PCache PCache;
type PgHdr (line 15556) | struct PgHdr {
type Db (line 16117) | struct Db {
type Schema (line 16142) | struct Schema {
type Lookaside (line 16206) | struct Lookaside {
type LookasideSlot (line 16217) | struct LookasideSlot {
type FuncDefHash (line 16230) | struct FuncDefHash {
type sqlite3_userauth (line 16240) | typedef struct sqlite3_userauth sqlite3_userauth;
type sqlite3_userauth (line 16241) | struct sqlite3_userauth {
type sqlite3 (line 16289) | struct sqlite3 {
type FuncDef (line 16563) | struct FuncDef {
type FuncDestructor (line 16593) | struct FuncDestructor {
type Savepoint (line 16720) | struct Savepoint {
type Module (line 16741) | struct Module {
type Column (line 16753) | struct Column {
type CollSeq (line 16780) | struct CollSeq {
type VTable (line 16880) | struct VTable {
type Table (line 16894) | struct Table {
type FKey (line 17010) | struct FKey {
type KeyInfo (line 17075) | struct KeyInfo {
type UnpackedRecord (line 17120) | struct UnpackedRecord {
type Index (line 17166) | struct Index {
type IndexSample (line 17227) | struct IndexSample {
type Token (line 17251) | struct Token {
type AggInfo (line 17269) | struct AggInfo {
type i16 (line 17311) | typedef i16 ynVar;
type ynVar (line 17313) | typedef int ynVar;
type Expr (line 17379) | struct Expr {
type ExprList (line 17520) | struct ExprList {
type IdList (line 17556) | struct IdList {
type SrcList (line 17583) | struct SrcList {
type NameContext (line 17683) | struct NameContext {
type Upsert (line 17734) | struct Upsert {
type Select (line 17767) | struct Select {
type SelectDest (line 17906) | struct SelectDest {
type AutoincInfo (line 17924) | struct AutoincInfo {
type TriggerPrg (line 17949) | struct TriggerPrg {
type yDbMask (line 17968) | typedef unsigned int yDbMask;
type Parse (line 17992) | struct Parse {
type AuthContext (line 18132) | struct AuthContext {
type Trigger (line 18184) | struct Trigger {
type TriggerStep (line 18246) | struct TriggerStep {
type DbFixer (line 18266) | typedef struct DbFixer DbFixer;
type DbFixer (line 18267) | struct DbFixer {
type sqlite3_str (line 18280) | struct sqlite3_str {
type InitData (line 18300) | typedef struct {
type Sqlite3Config (line 18319) | struct Sqlite3Config {
type Walker (line 18400) | struct Walker {
type With (line 18450) | struct With {
type TreeView (line 18466) | struct TreeView {
type Window (line 18490) | struct Window {
type SrcList_item (line 18523) | struct SrcList_item
type PrintfArguments (line 18726) | struct PrintfArguments {
type SrcList_item (line 18884) | struct SrcList_item
type SrcList_item (line 18942) | struct SrcList_item
type Sqlite3Config (line 19201) | struct Sqlite3Config
type sqlcipher_provider (line 19685) | typedef struct {
type MemPage (line 19991) | typedef struct MemPage MemPage;
type BtLock (line 19992) | typedef struct BtLock BtLock;
type CellInfo (line 19993) | typedef struct CellInfo CellInfo;
type MemPage (line 20032) | struct MemPage {
type BtLock (line 20071) | struct BtLock {
type Btree (line 20103) | struct Btree {
type BtShared (line 20166) | struct BtShared {
type CellInfo (line 20222) | struct CellInfo {
type BtCursor (line 20267) | struct BtCursor {
type IntegrityCk (line 20434) | typedef struct IntegrityCk IntegrityCk;
type IntegrityCk (line 20435) | struct IntegrityCk {
function cipher_hex2int (line 20603) | static int cipher_hex2int(char c) {
function cipher_hex2bin (line 20612) | static void cipher_hex2bin(const unsigned char *hex, int sz, unsigned ch...
function cipher_bin2hex (line 20623) | static void cipher_bin2hex(const unsigned char* in, int sz, char *out) {
function cipher_isHex (line 20634) | static int cipher_isHex(const unsigned char *hex, int sz){
type codec_ctx (line 20649) | typedef struct codec_ctx codec_ctx;
function codec_vdbe_return_string (line 20760) | static void codec_vdbe_return_string(Parse *pParse, const char *zLabel, ...
function codec_set_btree_to_codec_pagesize (line 20768) | static int codec_set_btree_to_codec_pagesize(sqlite3 *db, Db *pDb, codec...
function codec_set_pass_key (line 20795) | static int codec_set_pass_key(sqlite3* db, int nDb, const void *zKey, in...
function sqlcipher_codec_pragma (line 20806) | int sqlcipher_codec_pragma(sqlite3* db, int iDb, Parse *pParse, const ch...
type Db (line 21461) | struct Db
function sqlite3FreeCodecArg (line 21467) | static void sqlite3FreeCodecArg(void *pCodecArg) {
function SQLITE_PRIVATE (line 21474) | SQLITE_PRIVATE int sqlite3CodecAttach(sqlite3* db, int nDb, const void *...
function sqlcipher_find_db_index (line 21542) | int sqlcipher_find_db_index(sqlite3 *db, const char *zDb) {
function SQLITE_API (line 21556) | SQLITE_API void sqlite3_activate_see(const char* in) {
function SQLITE_API (line 21560) | SQLITE_API int sqlite3_key(sqlite3 *db, const void *pKey, int nKey) {
function SQLITE_API (line 21565) | SQLITE_API int sqlite3_key_v2(sqlite3 *db, const char *zDb, const void *...
function SQLITE_API (line 21575) | SQLITE_API int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey) {
function SQLITE_API (line 21590) | SQLITE_API int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void...
function SQLITE_PRIVATE (line 21660) | SQLITE_PRIVATE void sqlite3CodecGetKey(sqlite3* db, int nDb, void **zKey...
function cipher_hex2bin (line 21682) | void cipher_hex2bin(const unsigned char *hex, int sz, unsigned char *out){
function cipher_bin2hex (line 21691) | void cipher_bin2hex(const unsigned char* in, int sz, char *out) {
function cipher_isHex (line 21700) | int cipher_isHex(const unsigned char *hex, int sz){
function sqlcipher_finalize (line 21737) | static int sqlcipher_finalize(sqlite3 *db, sqlite3_stmt *pStmt, char **p...
function sqlcipher_execSql (line 21751) | static int sqlcipher_execSql(sqlite3 *db, char **pzErrMsg, const char *z...
function sqlcipher_execExecSql (line 21772) | static int sqlcipher_execExecSql(sqlite3 *db, char **pzErrMsg, const cha...
function sqlcipher_exportFunc (line 21795) | void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_va...
type cipher_ctx (line 21997) | typedef struct {
type codec_ctx (line 22007) | struct codec_ctx {
function sqlcipher_mem_init (line 22036) | static int sqlcipher_mem_init(void *pAppData) {
function sqlcipher_mem_shutdown (line 22039) | static void sqlcipher_mem_shutdown(void *pAppData) {
function sqlcipher_mem_size (line 22051) | static int sqlcipher_mem_size(void *p) {
function sqlcipher_mem_free (line 22054) | static void sqlcipher_mem_free(void *p) {
function sqlcipher_mem_roundup (line 22068) | static int sqlcipher_mem_roundup(int n) {
function sqlcipher_init_memmethods (line 22083) | void sqlcipher_init_memmethods() {
function sqlcipher_register_provider (line 22093) | int sqlcipher_register_provider(sqlcipher_provider *p) {
function sqlcipher_provider (line 22115) | sqlcipher_provider* sqlcipher_get_provider() {
function sqlcipher_activate (line 22119) | void sqlcipher_activate() {
function sqlcipher_deactivate (line 22164) | void sqlcipher_deactivate() {
function sqlcipher_ismemset (line 22234) | int sqlcipher_ismemset(const void *v, unsigned char value, int len) {
function sqlcipher_memcmp (line 22271) | int sqlcipher_memcmp(const void *v0, const void *v1, int len) {
function sqlcipher_mlock (line 22294) | void sqlcipher_mlock(void *ptr, int sz) {
function sqlcipher_munlock (line 22321) | void sqlcipher_munlock(void *ptr, int sz) {
function sqlcipher_free (line 22356) | void sqlcipher_free(void *ptr, int sz) {
function sqlcipher_cipher_ctx_init (line 22391) | static int sqlcipher_cipher_ctx_init(codec_ctx *ctx, cipher_ctx **iCtx) {
function sqlcipher_cipher_ctx_free (line 22413) | static void sqlcipher_cipher_ctx_free(codec_ctx* ctx, cipher_ctx **iCtx) {
function sqlcipher_codec_ctx_reserve_setup (line 22423) | static int sqlcipher_codec_ctx_reserve_setup(codec_ctx *ctx) {
function sqlcipher_cipher_ctx_cmp (line 22450) | static int sqlcipher_cipher_ctx_cmp(cipher_ctx *c1, cipher_ctx *c2) {
function sqlcipher_cipher_ctx_copy (line 22491) | static int sqlcipher_cipher_ctx_copy(codec_ctx *ctx, cipher_ctx *target,...
function sqlcipher_cipher_ctx_set_keyspec (line 22525) | static int sqlcipher_cipher_ctx_set_keyspec(codec_ctx *ctx, cipher_ctx *...
function sqlcipher_codec_get_store_pass (line 22541) | int sqlcipher_codec_get_store_pass(codec_ctx *ctx) {
function sqlcipher_codec_set_store_pass (line 22545) | void sqlcipher_codec_set_store_pass(codec_ctx *ctx, int value) {
function sqlcipher_codec_get_pass (line 22549) | void sqlcipher_codec_get_pass(codec_ctx *ctx, void **zKey, int *nKey) {
function sqlcipher_set_derive_key (line 22554) | static void sqlcipher_set_derive_key(codec_ctx *ctx, int derive) {
function sqlcipher_cipher_ctx_set_pass (line 22565) | static int sqlcipher_cipher_ctx_set_pass(cipher_ctx *ctx, const void *zK...
function sqlcipher_codec_ctx_set_pass (line 22580) | int sqlcipher_codec_ctx_set_pass(codec_ctx *ctx, const void *zKey, int n...
function sqlcipher_set_default_kdf_iter (line 22599) | void sqlcipher_set_default_kdf_iter(int iter) {
function sqlcipher_get_default_kdf_iter (line 22603) | int sqlcipher_get_default_kdf_iter() {
function sqlcipher_codec_ctx_set_kdf_iter (line 22607) | int sqlcipher_codec_ctx_set_kdf_iter(codec_ctx *ctx, int kdf_iter) {
function sqlcipher_codec_ctx_get_kdf_iter (line 22613) | int sqlcipher_codec_ctx_get_kdf_iter(codec_ctx *ctx) {
function sqlcipher_codec_ctx_set_fast_kdf_iter (line 22617) | int sqlcipher_codec_ctx_set_fast_kdf_iter(codec_ctx *ctx, int fast_kdf_i...
function sqlcipher_codec_ctx_get_fast_kdf_iter (line 22623) | int sqlcipher_codec_ctx_get_fast_kdf_iter(codec_ctx *ctx) {
function sqlcipher_set_default_use_hmac (line 22628) | void sqlcipher_set_default_use_hmac(int use) {
function sqlcipher_get_default_use_hmac (line 22633) | int sqlcipher_get_default_use_hmac() {
function sqlcipher_set_hmac_salt_mask (line 22637) | void sqlcipher_set_hmac_salt_mask(unsigned char mask) {
function sqlcipher_get_hmac_salt_mask (line 22641) | unsigned char sqlcipher_get_hmac_salt_mask() {
function sqlcipher_codec_ctx_set_use_hmac (line 22646) | int sqlcipher_codec_ctx_set_use_hmac(codec_ctx *ctx, int use) {
function sqlcipher_codec_ctx_get_use_hmac (line 22656) | int sqlcipher_codec_ctx_get_use_hmac(codec_ctx *ctx) {
function sqlcipher_set_default_plaintext_header_size (line 22665) | int sqlcipher_set_default_plaintext_header_size(int size) {
function sqlcipher_codec_ctx_set_plaintext_header_size (line 22670) | int sqlcipher_codec_ctx_set_plaintext_header_size(codec_ctx *ctx, int si...
function sqlcipher_get_default_plaintext_header_size (line 22678) | int sqlcipher_get_default_plaintext_header_size() {
function sqlcipher_codec_ctx_get_plaintext_header_size (line 22682) | int sqlcipher_codec_ctx_get_plaintext_header_size(codec_ctx *ctx) {
function sqlcipher_set_default_hmac_algorithm (line 22687) | int sqlcipher_set_default_hmac_algorithm(int algorithm) {
function sqlcipher_codec_ctx_set_hmac_algorithm (line 22692) | int sqlcipher_codec_ctx_set_hmac_algorithm(codec_ctx *ctx, int algorithm) {
function sqlcipher_get_default_hmac_algorithm (line 22697) | int sqlcipher_get_default_hmac_algorithm() {
function sqlcipher_codec_ctx_get_hmac_algorithm (line 22701) | int sqlcipher_codec_ctx_get_hmac_algorithm(codec_ctx *ctx) {
function sqlcipher_set_default_kdf_algorithm (line 22706) | int sqlcipher_set_default_kdf_algorithm(int algorithm) {
function sqlcipher_codec_ctx_set_kdf_algorithm (line 22711) | int sqlcipher_codec_ctx_set_kdf_algorithm(codec_ctx *ctx, int algorithm) {
function sqlcipher_get_default_kdf_algorithm (line 22716) | int sqlcipher_get_default_kdf_algorithm() {
function sqlcipher_codec_ctx_get_kdf_algorithm (line 22720) | int sqlcipher_codec_ctx_get_kdf_algorithm(codec_ctx *ctx) {
function sqlcipher_codec_ctx_set_flag (line 22724) | int sqlcipher_codec_ctx_set_flag(codec_ctx *ctx, unsigned int flag) {
function sqlcipher_codec_ctx_unset_flag (line 22729) | int sqlcipher_codec_ctx_unset_flag(codec_ctx *ctx, unsigned int flag) {
function sqlcipher_codec_ctx_get_flag (line 22734) | int sqlcipher_codec_ctx_get_flag(codec_ctx *ctx, unsigned int flag) {
function sqlcipher_codec_ctx_set_error (line 22738) | void sqlcipher_codec_ctx_set_error(codec_ctx *ctx, int error) {
function sqlcipher_codec_ctx_get_reservesize (line 22744) | int sqlcipher_codec_ctx_get_reservesize(codec_ctx *ctx) {
function sqlcipher_codec_ctx_init_kdf_salt (line 22752) | static int sqlcipher_codec_ctx_init_kdf_salt(codec_ctx *ctx) {
function sqlcipher_codec_ctx_set_kdf_salt (line 22769) | int sqlcipher_codec_ctx_set_kdf_salt(codec_ctx *ctx, unsigned char *salt...
function sqlcipher_codec_ctx_get_kdf_salt (line 22778) | int sqlcipher_codec_ctx_get_kdf_salt(codec_ctx *ctx, void** salt) {
function sqlcipher_codec_get_keyspec (line 22787) | void sqlcipher_codec_get_keyspec(codec_ctx *ctx, void **zKey, int *nKey) {
function sqlcipher_codec_ctx_set_pagesize (line 22792) | int sqlcipher_codec_ctx_set_pagesize(codec_ctx *ctx, int size) {
function sqlcipher_codec_ctx_get_pagesize (line 22810) | int sqlcipher_codec_ctx_get_pagesize(codec_ctx *ctx) {
function sqlcipher_set_default_pagesize (line 22814) | void sqlcipher_set_default_pagesize(int page_size) {
function sqlcipher_get_default_pagesize (line 22818) | int sqlcipher_get_default_pagesize() {
function sqlcipher_set_mem_security (line 22822) | void sqlcipher_set_mem_security(int on) {
function sqlcipher_get_mem_security (line 22829) | int sqlcipher_get_mem_security() {
function sqlcipher_codec_ctx_init (line 22838) | int sqlcipher_codec_ctx_init(codec_ctx **iCtx, Db *pDb, Pager *pPager, c...
function sqlcipher_codec_ctx_free (line 22953) | void sqlcipher_codec_ctx_free(codec_ctx **iCtx) {
function sqlcipher_put4byte_le (line 22969) | static void sqlcipher_put4byte_le(unsigned char *p, u32 v) {
function sqlcipher_page_hmac (line 22976) | static int sqlcipher_page_hmac(codec_ctx *ctx, cipher_ctx *c_ctx, Pgno p...
function sqlcipher_page_cipher (line 23012) | int sqlcipher_page_cipher(codec_ctx *ctx, int for_ctx, Pgno pgno, int mo...
function sqlcipher_cipher_ctx_key_derive (line 23105) | static int sqlcipher_cipher_ctx_key_derive(codec_ctx *ctx, cipher_ctx *c...
function sqlcipher_codec_key_derive (line 23172) | int sqlcipher_codec_key_derive(codec_ctx *ctx) {
function sqlcipher_codec_key_copy (line 23196) | int sqlcipher_codec_key_copy(codec_ctx *ctx, int source) {
function sqlcipher_check_connection (line 23209) | static int sqlcipher_check_connection(const char *filename, char *key, i...
function sqlcipher_codec_ctx_migrate (line 23256) | int sqlcipher_codec_ctx_migrate(codec_ctx *ctx) {
function sqlcipher_codec_add_random (line 23433) | int sqlcipher_codec_add_random(codec_ctx *ctx, const char *zRight, int r...
function sqlcipher_codec_fips_status (line 23455) | int sqlcipher_codec_fips_status(codec_ctx *ctx) {
function sqlcipher_codec_hmac_sha1 (line 23463) | int sqlcipher_codec_hmac_sha1(const codec_ctx *ctx, const unsigned char ...
function sqlcipher_ltc_add_random (line 23520) | static int sqlcipher_ltc_add_random(void *ctx, void *buffer, int length) {
function sqlcipher_ltc_activate (line 23545) | static int sqlcipher_ltc_activate(void *ctx) {
function sqlcipher_ltc_deactivate (line 23579) | static int sqlcipher_ltc_deactivate(void *ctx) {
function sqlcipher_ltc_random (line 23609) | static int sqlcipher_ltc_random(void *ctx, void *buffer, int length) {
function sqlcipher_ltc_hmac (line 23620) | static int sqlcipher_ltc_hmac(void *ctx, int algorithm, unsigned char *h...
function sqlcipher_ltc_kdf (line 23649) | static int sqlcipher_ltc_kdf(void *ctx, int algorithm, const unsigned ch...
function sqlcipher_ltc_cipher (line 23679) | static int sqlcipher_ltc_cipher(void *ctx, int mode, unsigned char *key,...
function sqlcipher_ltc_get_key_sz (line 23691) | static int sqlcipher_ltc_get_key_sz(void *ctx) {
function sqlcipher_ltc_get_iv_sz (line 23696) | static int sqlcipher_ltc_get_iv_sz(void *ctx) {
function sqlcipher_ltc_get_block_sz (line 23701) | static int sqlcipher_ltc_get_block_sz(void *ctx) {
function sqlcipher_ltc_get_hmac_sz (line 23706) | static int sqlcipher_ltc_get_hmac_sz(void *ctx, int algorithm) {
function sqlcipher_ltc_ctx_copy (line 23727) | static int sqlcipher_ltc_ctx_copy(void *target_ctx, void *source_ctx) {
function sqlcipher_ltc_ctx_cmp (line 23731) | static int sqlcipher_ltc_ctx_cmp(void *c1, void *c2) {
function sqlcipher_ltc_ctx_init (line 23735) | static int sqlcipher_ltc_ctx_init(void **ctx) {
function sqlcipher_ltc_ctx_free (line 23740) | static int sqlcipher_ltc_ctx_free(void **ctx) {
function sqlcipher_ltc_fips_status (line 23745) | static int sqlcipher_ltc_fips_status(void *ctx) {
function sqlcipher_ltc_setup (line 23749) | int sqlcipher_ltc_setup(sqlcipher_provider *p) {
type openssl_ctx (line 23819) | typedef struct {
function HMAC_CTX (line 23828) | static HMAC_CTX *HMAC_CTX_new(void)
function HMAC_CTX_free (line 23841) | static void HMAC_CTX_free(HMAC_CTX *ctx)
function sqlcipher_openssl_add_random (line 23850) | static int sqlcipher_openssl_add_random(void *ctx, void *buffer, int len...
function sqlcipher_openssl_activate (line 23874) | static int sqlcipher_openssl_activate(void *ctx) {
function sqlcipher_openssl_deactivate (line 23924) | static int sqlcipher_openssl_deactivate(void *ctx) {
function sqlcipher_openssl_random (line 23965) | static int sqlcipher_openssl_random (void *ctx, void *buffer, int length) {
function sqlcipher_openssl_hmac (line 23987) | static int sqlcipher_openssl_hmac(void *ctx, int algorithm, unsigned cha...
function sqlcipher_openssl_kdf (line 24025) | static int sqlcipher_openssl_kdf(void *ctx, int algorithm, const unsigne...
function sqlcipher_openssl_cipher (line 24049) | static int sqlcipher_openssl_cipher(void *ctx, int mode, unsigned char *...
function sqlcipher_openssl_get_key_sz (line 24075) | static int sqlcipher_openssl_get_key_sz(void *ctx) {
function sqlcipher_openssl_get_iv_sz (line 24079) | static int sqlcipher_openssl_get_iv_sz(void *ctx) {
function sqlcipher_openssl_get_block_sz (line 24083) | static int sqlcipher_openssl_get_block_sz(void *ctx) {
function sqlcipher_openssl_get_hmac_sz (line 24087) | static int sqlcipher_openssl_get_hmac_sz(void *ctx, int algorithm) {
function sqlcipher_openssl_ctx_copy (line 24103) | static int sqlcipher_openssl_ctx_copy(void *target_ctx, void *source_ctx) {
function sqlcipher_openssl_ctx_cmp (line 24108) | static int sqlcipher_openssl_ctx_cmp(void *c1, void *c2) {
function sqlcipher_openssl_ctx_init (line 24112) | static int sqlcipher_openssl_ctx_init(void **ctx) {
function sqlcipher_openssl_ctx_free (line 24124) | static int sqlcipher_openssl_ctx_free(void **ctx) {
function sqlcipher_openssl_fips_status (line 24130) | static int sqlcipher_openssl_fips_status(void *ctx) {
function sqlcipher_openssl_setup (line 24138) | int sqlcipher_openssl_setup(sqlcipher_provider *p) {
function sqlcipher_cc_add_random (line 24208) | static int sqlcipher_cc_add_random(void *ctx, void *buffer, int length) {
function sqlcipher_cc_random (line 24213) | static int sqlcipher_cc_random (void *ctx, void *buffer, int length) {
function sqlcipher_cc_hmac (line 24235) | static int sqlcipher_cc_hmac(void *ctx, int algorithm, unsigned char *hm...
function sqlcipher_cc_kdf (line 24257) | static int sqlcipher_cc_kdf(void *ctx, int algorithm, const unsigned cha...
function sqlcipher_cc_cipher (line 24274) | static int sqlcipher_cc_cipher(void *ctx, int mode, unsigned char *key, ...
function sqlcipher_cc_get_key_sz (line 24295) | static int sqlcipher_cc_get_key_sz(void *ctx) {
function sqlcipher_cc_get_iv_sz (line 24299) | static int sqlcipher_cc_get_iv_sz(void *ctx) {
function sqlcipher_cc_get_block_sz (line 24303) | static int sqlcipher_cc_get_block_sz(void *ctx) {
function sqlcipher_cc_get_hmac_sz (line 24307) | static int sqlcipher_cc_get_hmac_sz(void *ctx, int algorithm) {
function sqlcipher_cc_ctx_copy (line 24323) | static int sqlcipher_cc_ctx_copy(void *target_ctx, void *source_ctx) {
function sqlcipher_cc_ctx_cmp (line 24327) | static int sqlcipher_cc_ctx_cmp(void *c1, void *c2) {
function sqlcipher_cc_ctx_init (line 24331) | static int sqlcipher_cc_ctx_init(void **ctx) {
function sqlcipher_cc_ctx_free (line 24335) | static int sqlcipher_cc_ctx_free(void **ctx) {
function sqlcipher_cc_fips_status (line 24339) | static int sqlcipher_cc_fips_status(void *ctx) {
function sqlcipher_cc_setup (line 24343) | int sqlcipher_cc_setup(sqlcipher_provider *p) {
type Sqlite3Config (line 24572) | struct Sqlite3Config
type Op (line 24750) | typedef struct VdbeOp Op;
type Bool (line 24755) | typedef unsigned Bool;
type VdbeSorter (line 24758) | typedef struct VdbeSorter VdbeSorter;
type AuxData (line 24761) | typedef struct AuxData AuxData;
type VdbeCursor (line 24779) | typedef struct VdbeCursor VdbeCursor;
type VdbeCursor (line 24780) | struct VdbeCursor {
type VdbeFrame (line 24865) | typedef struct VdbeFrame VdbeFrame;
type VdbeFrame (line 24866) | struct VdbeFrame {
type sqlite3_value (line 24904) | struct sqlite3_value {
type AuxData (line 25005) | struct AuxData {
type sqlite3_context (line 25026) | struct sqlite3_context {
type bft (line 25041) | typedef unsigned bft;
type ScanStatus (line 25046) | typedef struct ScanStatus ScanStatus;
type ScanStatus (line 25047) | struct ScanStatus {
type DblquoteStr (line 25063) | typedef struct DblquoteStr DblquoteStr;
type DblquoteStr (line 25064) | struct DblquoteStr {
type Vdbe (line 25076) | struct Vdbe {
type PreUpdate (line 25162) | struct PreUpdate {
type sqlite3_int64 (line 25321) | typedef sqlite3_int64 sqlite3StatValueType;
type u32 (line 25323) | typedef u32 sqlite3StatValueType;
type sqlite3StatType (line 25325) | typedef struct sqlite3StatType sqlite3StatType;
function SQLITE_WSD (line 25326) | static SQLITE_WSD struct sqlite3StatType {
function SQLITE_PRIVATE (line 25367) | SQLITE_PRIVATE sqlite3_int64 sqlite3StatusValue(int op){
function SQLITE_PRIVATE (line 25387) | SQLITE_PRIVATE void sqlite3StatusUp(int op, int N){
function SQLITE_PRIVATE (line 25398) | SQLITE_PRIVATE void sqlite3StatusDown(int op, int N){
function SQLITE_PRIVATE (line 25412) | SQLITE_PRIVATE void sqlite3StatusHighwater(int op, int X){
function SQLITE_API (line 25432) | SQLITE_API int sqlite3_status64(
function SQLITE_API (line 25457) | SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, in...
function u32 (line 25474) | static u32 countLookasideSlots(LookasideSlot *p){
function SQLITE_PRIVATE (line 25486) | SQLITE_PRIVATE int sqlite3LookasideUsed(sqlite3 *db, int *pHighwater){
function SQLITE_API (line 25496) | SQLITE_API int sqlite3_db_status(
type tm (line 25741) | struct tm
type DateTime (line 25747) | typedef struct DateTime DateTime;
type DateTime (line 25748) | struct DateTime {
function getDigits (line 25791) | static int getDigits(const char *zDate, const char *zFormat, ...){
function parseTimezone (line 25845) | static int parseTimezone(const char *zDate, DateTime *p){
function parseHhMmSs (line 25881) | static int parseHhMmSs(const char *zDate, DateTime *p){
function datetimeError (line 25921) | static void datetimeError(DateTime *p){
function computeJD (line 25932) | static void computeJD(DateTime *p){
function parseYyyyMmDd (line 25982) | static int parseYyyyMmDd(const char *zDate, DateTime *p){
function setDateTimeToCurrent (line 26019) | static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
function setRawDateNumber (line 26035) | static void setRawDateNumber(DateTime *p, double r){
function parseDateOrTime (line 26060) | static int parseDateOrTime(
function validJulianDay (line 26093) | static int validJulianDay(sqlite3_int64 iJD){
function computeYMD (line 26100) | static void computeYMD(DateTime *p){
function computeHMS (line 26129) | static void computeHMS(DateTime *p){
function computeYMD_HMS (line 26148) | static void computeYMD_HMS(DateTime *p){
function clearYMD_HMS_TZ (line 26156) | static void clearYMD_HMS_TZ(DateTime *p){
function osLocaltime (line 26194) | static int osLocaltime(time_t *t, struct tm *pTm){
function sqlite3_int64 (line 26233) | static sqlite3_int64 localtimeOffset(
function parseModifier (line 26337) | static int parseModifier(
function isDate (line 26554) | static int isDate(
function juliandayFunc (line 26597) | static void juliandayFunc(
function datetimeFunc (line 26614) | static void datetimeFunc(
function timeFunc (line 26634) | static void timeFunc(
function dateFunc (line 26653) | static void dateFunc(
function strftimeFunc (line 26686) | static void strftimeFunc(
function ctimeFunc (line 26824) | static void ctimeFunc(
function cdateFunc (line 26838) | static void cdateFunc(
function ctimestampFunc (line 26852) | static void ctimestampFunc(
function currentTimeFunc (line 26874) | static void currentTimeFunc(
function SQLITE_PRIVATE (line 26912) | SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
function SQLITE_PRIVATE (line 27015) | SQLITE_PRIVATE void sqlite3OsClose(sqlite3_file *pId){
function SQLITE_PRIVATE (line 27021) | SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file *id, void *pBuf, int amt, ...
function SQLITE_PRIVATE (line 27025) | SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file *id, const void *pBuf, in...
function SQLITE_PRIVATE (line 27029) | SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
function SQLITE_PRIVATE (line 27032) | SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
function SQLITE_PRIVATE (line 27036) | SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
function SQLITE_PRIVATE (line 27040) | SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file *id, int lockType){
function SQLITE_PRIVATE (line 27044) | SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file *id, int lockType){
function SQLITE_PRIVATE (line 27047) | SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pRe...
function SQLITE_PRIVATE (line 27060) | SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *...
function SQLITE_PRIVATE (line 27081) | SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file *id, int op, v...
function SQLITE_PRIVATE (line 27085) | SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
function SQLITE_PRIVATE (line 27089) | SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
function SQLITE_PRIVATE (line 27093) | SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n,...
function SQLITE_PRIVATE (line 27096) | SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id){
function SQLITE_PRIVATE (line 27099) | SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int deleteFlag){
function SQLITE_PRIVATE (line 27102) | SQLITE_PRIVATE int sqlite3OsShmMap(
function SQLITE_PRIVATE (line 27116) | SQLITE_PRIVATE int sqlite3OsFetch(sqlite3_file *id, i64 iOff, int iAmt, ...
function SQLITE_PRIVATE (line 27120) | SQLITE_PRIVATE int sqlite3OsUnfetch(sqlite3_file *id, i64 iOff, void *p){
function SQLITE_PRIVATE (line 27125) | SQLITE_PRIVATE int sqlite3OsFetch(sqlite3_file *id, i64 iOff, int iAmt, ...
function SQLITE_PRIVATE (line 27129) | SQLITE_PRIVATE int sqlite3OsUnfetch(sqlite3_file *id, i64 iOff, void *p){
function SQLITE_PRIVATE (line 27138) | SQLITE_PRIVATE int sqlite3OsOpen(
function SQLITE_PRIVATE (line 27155) | SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath,...
function SQLITE_PRIVATE (line 27160) | SQLITE_PRIVATE int sqlite3OsAccess(
function SQLITE_PRIVATE (line 27169) | SQLITE_PRIVATE int sqlite3OsFullPathname(
function SQLITE_PRIVATE (line 27180) | SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *pVfs, const char *zPath){
function SQLITE_PRIVATE (line 27183) | SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *pVfs, int nByte, char ...
function SQLITE_PRIVATE (line 27186) | SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, con...
function SQLITE_PRIVATE (line 27189) | SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *pVfs, void *pHandle){
function SQLITE_PRIVATE (line 27193) | SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *pVfs, int nByte, cha...
function SQLITE_PRIVATE (line 27196) | SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){
function SQLITE_PRIVATE (line 27199) | SQLITE_PRIVATE int sqlite3OsGetLastError(sqlite3_vfs *pVfs){
function SQLITE_PRIVATE (line 27202) | SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_...
function SQLITE_PRIVATE (line 27220) | SQLITE_PRIVATE int sqlite3OsOpenMalloc(
function SQLITE_PRIVATE (line 27242) | SQLITE_PRIVATE void sqlite3OsCloseFree(sqlite3_file *pFile){
function SQLITE_PRIVATE (line 27254) | SQLITE_PRIVATE int sqlite3OsInit(void){
function SQLITE_API (line 27271) | SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfs){
function vfsUnlink (line 27295) | static void vfsUnlink(sqlite3_vfs *pVfs){
function SQLITE_API (line 27317) | SQLITE_API int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){
function SQLITE_API (line 27345) | SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){
type BenignMallocHooks (line 27393) | typedef struct BenignMallocHooks BenignMallocHooks;
function SQLITE_WSD (line 27394) | static SQLITE_WSD struct BenignMallocHooks {
function SQLITE_PRIVATE (line 27419) | SQLITE_PRIVATE void sqlite3BenignMallocHooks(
function SQLITE_PRIVATE (line 27433) | SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void){
function SQLITE_PRIVATE (line 27439) | SQLITE_PRIVATE void sqlite3EndBenignMalloc(void){
function sqlite3MemFree (line 27481) | static void sqlite3MemFree(void *pPrior){ return; }
function sqlite3MemSize (line 27483) | static int sqlite3MemSize(void *pPrior){ return 0; }
function sqlite3MemRoundup (line 27484) | static int sqlite3MemRoundup(int n){ return n; }
function sqlite3MemInit (line 27485) | static int sqlite3MemInit(void *NotUsed){ return SQLITE_OK; }
function sqlite3MemShutdown (line 27486) | static void sqlite3MemShutdown(void *NotUsed){ return; }
function SQLITE_PRIVATE (line 27494) | SQLITE_PRIVATE void sqlite3MemSetDefault(void){
function sqlite3MemFree (line 27673) | static void sqlite3MemFree(void *pPrior){
function sqlite3MemSize (line 27688) | static int sqlite3MemSize(void *pPrior){
function sqlite3MemRoundup (line 27743) | static int sqlite3MemRoundup(int n){
function sqlite3MemInit (line 27750) | static int sqlite3MemInit(void *NotUsed){
function sqlite3MemShutdown (line 27777) | static void sqlite3MemShutdown(void *NotUsed){
function SQLITE_PRIVATE (line 27788) | SQLITE_PRIVATE void sqlite3MemSetDefault(void){
type MemBlockHdr (line 27860) | struct MemBlockHdr {
type MemBlockHdr (line 27897) | struct MemBlockHdr
type MemBlockHdr (line 27898) | struct MemBlockHdr
function adjustStats (line 27934) | static void adjustStats(int iSize, int increment){
type MemBlockHdr (line 27957) | struct MemBlockHdr
type MemBlockHdr (line 27958) | struct MemBlockHdr
type MemBlockHdr (line 27963) | struct MemBlockHdr
function sqlite3MemSize (line 27981) | static int sqlite3MemSize(void *p){
function sqlite3MemInit (line 27993) | static int sqlite3MemInit(void *NotUsed){
function sqlite3MemShutdown (line 28007) | static void sqlite3MemShutdown(void *NotUsed){
function sqlite3MemRoundup (line 28015) | static int sqlite3MemRoundup(int n){
function randomFill (line 28024) | static void randomFill(char *pBuf, int nByte){
type MemBlockHdr (line 28048) | struct MemBlockHdr
type MemBlockHdr (line 28064) | struct MemBlockHdr
function sqlite3MemFree (line 28106) | static void sqlite3MemFree(void *pPrior){
type MemBlockHdr (line 28149) | struct MemBlockHdr
function SQLITE_PRIVATE (line 28169) | SQLITE_PRIVATE void sqlite3MemSetDefault(void){
function SQLITE_PRIVATE (line 28186) | SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){
function SQLITE_PRIVATE (line 28204) | SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
function SQLITE_PRIVATE (line 28226) | SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){
function SQLITE_PRIVATE (line 28244) | SQLITE_PRIVATE void sqlite3MemdebugBacktrace(int depth){
function SQLITE_PRIVATE (line 28251) | SQLITE_PRIVATE void sqlite3MemdebugBacktraceCallback(void (*xBacktrace)(...
function SQLITE_PRIVATE (line 28258) | SQLITE_PRIVATE void sqlite3MemdebugSettitle(const char *zTitle){
function SQLITE_PRIVATE (line 28268) | SQLITE_PRIVATE void sqlite3MemdebugSync(){
function SQLITE_PRIVATE (line 28281) | SQLITE_PRIVATE void sqlite3MemdebugDump(const char *zFilename){
function SQLITE_PRIVATE (line 28323) | SQLITE_PRIVATE int sqlite3MemdebugMallocCount(){
type Mem3Block (line 28416) | typedef struct Mem3Block Mem3Block;
type Mem3Block (line 28417) | struct Mem3Block {
function SQLITE_WSD (line 28436) | static SQLITE_WSD struct Mem3Global {
function memsys3UnlinkFromList (line 28483) | static void memsys3UnlinkFromList(u32 i, u32 *pRoot){
function memsys3Unlink (line 28503) | static void memsys3Unlink(u32 i){
function memsys3LinkIntoList (line 28523) | static void memsys3LinkIntoList(u32 i, u32 *pRoot){
function memsys3Link (line 28537) | static void memsys3Link(u32 i){
function memsys3Enter (line 28558) | static void memsys3Enter(void){
function memsys3Leave (line 28564) | static void memsys3Leave(void){
function memsys3OutOfMemory (line 28571) | static void memsys3OutOfMemory(int nByte){
function memsys3Merge (line 28651) | static void memsys3Merge(u32 *pRoot){
function memsys3FreeUnsafe (line 28772) | static void memsys3FreeUnsafe(void *pOld){
function memsys3Size (line 28813) | static int memsys3Size(void *p){
function memsys3Roundup (line 28824) | static int memsys3Roundup(int n){
function memsys3Free (line 28847) | static void memsys3Free(void *pPrior){
function memsys3Init (line 28888) | static int memsys3Init(void *NotUsed){
function memsys3Shutdown (line 28913) | static void memsys3Shutdown(void *NotUsed){
function SQLITE_PRIVATE (line 28925) | SQLITE_PRIVATE void sqlite3Memsys3Dump(const char *zFilename){
function SQLITE_PRIVATE (line 29009) | SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){
type Mem5Link (line 29093) | typedef struct Mem5Link Mem5Link;
type Mem5Link (line 29094) | struct Mem5Link {
function SQLITE_WSD (line 29118) | static SQLITE_WSD struct Mem5Global {
function memsys5Unlink (line 29175) | static void memsys5Unlink(int i, int iLogsize){
function memsys5Link (line 29197) | static void memsys5Link(int i, int iLogsize){
function memsys5Enter (line 29216) | static void memsys5Enter(void){
function memsys5Leave (line 29219) | static void memsys5Leave(void){
function memsys5Size (line 29227) | static int memsys5Size(void *p){
function memsys5FreeUnsafe (line 29316) | static void memsys5FreeUnsafe(void *pOld){
function memsys5Free (line 29398) | static void memsys5Free(void *pPrior){
function memsys5Roundup (line 29447) | static int memsys5Roundup(int n){
function memsys5Log (line 29464) | static int memsys5Log(int iValue){
function memsys5Init (line 29476) | static int memsys5Init(void *NotUsed){
function memsys5Shutdown (line 29534) | static void memsys5Shutdown(void *NotUsed){
function SQLITE_PRIVATE (line 29545) | SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){
function SQLITE_PRIVATE (line 29588) | SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){
type CheckMutex (line 29659) | typedef struct CheckMutex CheckMutex;
type CheckMutex (line 29660) | struct CheckMutex {
function checkMutexHeld (line 29674) | static int checkMutexHeld(sqlite3_mutex *p){
function checkMutexNotheld (line 29677) | static int checkMutexNotheld(sqlite3_mutex *p){
function checkMutexInit (line 29685) | static int checkMutexInit(void){
function checkMutexEnd (line 29689) | static int checkMutexEnd(void){
function sqlite3_mutex (line 29697) | static sqlite3_mutex *checkMutexAlloc(int iType){
function checkMutexFree (line 29736) | static void checkMutexFree(sqlite3_mutex *p){
function checkMutexEnter (line 29759) | static void checkMutexEnter(sqlite3_mutex *p){
function checkMutexTry (line 29775) | static int checkMutexTry(sqlite3_mutex *p){
function checkMutexLeave (line 29783) | static void checkMutexLeave(sqlite3_mutex *p){
function sqlite3_mutex_methods (line 29788) | sqlite3_mutex_methods const *multiThreadedCheckMutex(void){
function SQLITE_PRIVATE (line 29812) | SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex *p){
function SQLITE_PRIVATE (line 29824) | SQLITE_PRIVATE int sqlite3MutexInit(void){
function SQLITE_PRIVATE (line 29869) | SQLITE_PRIVATE int sqlite3MutexEnd(void){
function SQLITE_API (line 29885) | SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
function SQLITE_PRIVATE (line 29894) | SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
function SQLITE_API (line 29906) | SQLITE_API void sqlite3_mutex_free(sqlite3_mutex *p){
function SQLITE_API (line 29917) | SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex *p){
function SQLITE_API (line 29928) | SQLITE_API int sqlite3_mutex_try(sqlite3_mutex *p){
function SQLITE_API (line 29943) | SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex *p){
function SQLITE_API (line 29955) | SQLITE_API int sqlite3_mutex_held(sqlite3_mutex *p){
function SQLITE_API (line 29959) | SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){
function noopMutexInit (line 30006) | static int noopMutexInit(void){ return SQLITE_OK; }
function noopMutexEnd (line 30007) | static int noopMutexEnd(void){ return SQLITE_OK; }
function sqlite3_mutex (line 30008) | static sqlite3_mutex *noopMutexAlloc(int id){
function noopMutexFree (line 30012) | static void noopMutexFree(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
function noopMutexEnter (line 30013) | static void noopMutexEnter(sqlite3_mutex *p){ UNUSED_PARAMETER(p); retur...
function noopMutexTry (line 30014) | static int noopMutexTry(sqlite3_mutex *p){
function noopMutexLeave (line 30018) | static void noopMutexLeave(sqlite3_mutex *p){ UNUSED_PARAMETER(p); retur...
function SQLITE_PRIVATE (line 30020) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
type sqlite3_debug_mutex (line 30048) | typedef struct sqlite3_debug_mutex {
function debugMutexHeld (line 30057) | static int debugMutexHeld(sqlite3_mutex *pX){
function debugMutexNotheld (line 30061) | static int debugMutexNotheld(sqlite3_mutex *pX){
function debugMutexInit (line 30069) | static int debugMutexInit(void){ return SQLITE_OK; }
function debugMutexEnd (line 30070) | static int debugMutexEnd(void){ return SQLITE_OK; }
function sqlite3_mutex (line 30077) | static sqlite3_mutex *debugMutexAlloc(int id){
function debugMutexFree (line 30108) | static void debugMutexFree(sqlite3_mutex *pX){
function debugMutexEnter (line 30131) | static void debugMutexEnter(sqlite3_mutex *pX){
function debugMutexTry (line 30136) | static int debugMutexTry(sqlite3_mutex *pX){
function debugMutexLeave (line 30149) | static void debugMutexLeave(sqlite3_mutex *pX){
function SQLITE_PRIVATE (line 30156) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
function SQLITE_PRIVATE (line 30179) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
type sqlite3_mutex (line 30227) | struct sqlite3_mutex {
function pthreadMutexHeld (line 30264) | static int pthreadMutexHeld(sqlite3_mutex *p){
function pthreadMutexNotheld (line 30267) | static int pthreadMutexNotheld(sqlite3_mutex *p){
function SQLITE_PRIVATE (line 30277) | SQLITE_PRIVATE void sqlite3MemoryBarrier(void){
function pthreadMutexInit (line 30288) | static int pthreadMutexInit(void){ return SQLITE_OK; }
function pthreadMutexEnd (line 30289) | static int pthreadMutexEnd(void){ return SQLITE_OK; }
function sqlite3_mutex (line 30339) | static sqlite3_mutex *pthreadMutexAlloc(int iType){
function pthreadMutexFree (line 30410) | static void pthreadMutexFree(sqlite3_mutex *p){
function pthreadMutexEnter (line 30437) | static void pthreadMutexEnter(sqlite3_mutex *p){
function pthreadMutexTry (line 30479) | static int pthreadMutexTry(sqlite3_mutex *p){
function pthreadMutexLeave (line 30536) | static void pthreadMutexLeave(sqlite3_mutex *p){
function SQLITE_PRIVATE (line 30559) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
function sqlite_uint64 (line 30677) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
function sqlite_uint64 (line 30685) | __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
function sqlite_uint64 (line 30696) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
function sqlite_uint64 (line 30704) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
function sqlite3Hwtime (line 30728) | sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
function local_ioerr (line 30766) | static void local_ioerr(){
type sqlite3_mutex (line 30910) | struct sqlite3_mutex {
function winMutexHeld (line 30939) | static int winMutexHeld(sqlite3_mutex *p){
function winMutexNotheld2 (line 30943) | static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){
function winMutexNotheld (line 30947) | static int winMutexNotheld(sqlite3_mutex *p){
function SQLITE_PRIVATE (line 30958) | SQLITE_PRIVATE void sqlite3MemoryBarrier(void){
function winMutexInit (line 31000) | static int winMutexInit(void){
function winMutexEnd (line 31022) | static int winMutexEnd(void){
function sqlite3_mutex (line 31085) | static sqlite3_mutex *winMutexAlloc(int iType){
function winMutexFree (line 31133) | static void winMutexFree(sqlite3_mutex *p){
function winMutexEnter (line 31157) | static void winMutexEnter(sqlite3_mutex *p){
function winMutexTry (line 31180) | static int winMutexTry(sqlite3_mutex *p){
function winMutexLeave (line 31230) | static void winMutexLeave(sqlite3_mutex *p){
function SQLITE_PRIVATE (line 31252) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
function SQLITE_API (line 31298) | SQLITE_API int sqlite3_release_memory(int n){
function SQLITE_WSD (line 31313) | static SQLITE_WSD struct Mem0Global {
function SQLITE_PRIVATE (line 31329) | SQLITE_PRIVATE sqlite3_mutex *sqlite3MallocMutex(void){
function SQLITE_API (line 31339) | SQLITE_API int sqlite3_memory_alarm(
function SQLITE_API (line 31355) | SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){
function SQLITE_API (line 31377) | SQLITE_API void sqlite3_soft_heap_limit(int n){
function SQLITE_PRIVATE (line 31385) | SQLITE_PRIVATE int sqlite3MallocInit(void){
function SQLITE_PRIVATE (line 31418) | SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){
function SQLITE_PRIVATE (line 31425) | SQLITE_PRIVATE void sqlite3MallocEnd(void){
function sqlite3_memory_used (line 31435) | sqlite3_memory_used(void){
function SQLITE_API (line 31446) | SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
function sqlite3MallocAlarm (line 31455) | static void sqlite3MallocAlarm(int nByte){
function mallocWithAlarm (line 31466) | static void mallocWithAlarm(int n, void **pp){
function SQLITE_PRIVATE (line 31515) | SQLITE_PRIVATE void *sqlite3Malloc(u64 n){
function SQLITE_API (line 31540) | SQLITE_API void *sqlite3_malloc(int n){
function SQLITE_API (line 31546) | SQLITE_API void *sqlite3_malloc64(sqlite3_uint64 n){
function isLookaside (line 31557) | static int isLookaside(sqlite3 *db, void *p){
function SQLITE_PRIVATE (line 31568) | SQLITE_PRIVATE int sqlite3MallocSize(void *p){
function SQLITE_PRIVATE (line 31572) | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
function SQLITE_API (line 31590) | SQLITE_API sqlite3_uint64 sqlite3_msize(void *p){
function SQLITE_API (line 31599) | SQLITE_API void sqlite3_free(void *p){
function SQLITE_NOINLINE (line 31618) | static SQLITE_NOINLINE void measureAllocationSize(sqlite3 *db, void *p){
function SQLITE_PRIVATE (line 31627) | SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){
function SQLITE_PRIVATE (line 31652) | SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
function SQLITE_PRIVATE (line 31660) | SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){
function SQLITE_API (line 31712) | SQLITE_API void *sqlite3_realloc(void *pOld, int n){
function SQLITE_API (line 31719) | SQLITE_API void *sqlite3_realloc64(void *pOld, sqlite3_uint64 n){
function SQLITE_PRIVATE (line 31730) | SQLITE_PRIVATE void *sqlite3MallocZero(u64 n){
function SQLITE_PRIVATE (line 31742) | SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, u64 n){
function SQLITE_NOINLINE (line 31754) | static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n){
function SQLITE_PRIVATE (line 31786) | SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){
function SQLITE_PRIVATE (line 31793) | SQLITE_PRIVATE void *sqlite3DbMallocRawNN(sqlite3 *db, u64 n){
function SQLITE_PRIVATE (line 31835) | SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, u64 n){
function SQLITE_NOINLINE (line 31842) | static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n){
function SQLITE_PRIVATE (line 31872) | SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, u64 n){
function SQLITE_PRIVATE (line 31888) | SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){
function SQLITE_PRIVATE (line 31901) | SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){
function SQLITE_PRIVATE (line 31921) | SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, c...
function SQLITE_PRIVATE (line 31932) | SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char ...
function SQLITE_PRIVATE (line 31943) | SQLITE_PRIVATE void sqlite3OomFault(sqlite3 *db){
function SQLITE_PRIVATE (line 31960) | SQLITE_PRIVATE void sqlite3OomClear(sqlite3 *db){
function SQLITE_NOINLINE (line 31972) | static SQLITE_NOINLINE int apiOomError(sqlite3 *db){
function SQLITE_PRIVATE (line 31990) | SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
type etByte (line 32048) | typedef unsigned char etByte;
type et_info (line 32054) | typedef struct et_info { /* Information about each format field */
function et_getdigit (line 32124) | static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
function setStrAccumError (line 32140) | static void setStrAccumError(StrAccum *p, u8 eError){
function sqlite3_int64 (line 32149) | static sqlite3_int64 getIntArg(PrintfArguments *p){
function getDoubleArg (line 32153) | static double getDoubleArg(PrintfArguments *p){
function SQLITE_API (line 32196) | SQLITE_API void sqlite3_str_vappendf(
function sqlite3StrAccumEnlarge (line 32883) | static int sqlite3StrAccumEnlarge(StrAccum *p, int N){
function SQLITE_API (line 32934) | SQLITE_API void sqlite3_str_appendchar(sqlite3_str *p, int N, char c){
function enlargeAndAppend (line 32950) | static void SQLITE_NOINLINE enlargeAndAppend(StrAccum *p, const char *z,...
function SQLITE_API (line 32962) | SQLITE_API void sqlite3_str_append(sqlite3_str *p, const char *z, int N){
function SQLITE_API (line 32979) | SQLITE_API void sqlite3_str_appendall(sqlite3_str *p, const char *z){
function SQLITE_NOINLINE (line 32989) | static SQLITE_NOINLINE char *strAccumFinishRealloc(StrAccum *p){
function SQLITE_PRIVATE (line 33002) | SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
function SQLITE_API (line 33024) | SQLITE_API char *sqlite3_str_finish(sqlite3_str *p){
function SQLITE_API (line 33036) | SQLITE_API int sqlite3_str_errcode(sqlite3_str *p){
function SQLITE_API (line 33041) | SQLITE_API int sqlite3_str_length(sqlite3_str *p){
function SQLITE_API (line 33046) | SQLITE_API char *sqlite3_str_value(sqlite3_str *p){
function SQLITE_API (line 33055) | SQLITE_API void sqlite3_str_reset(StrAccum *p){
function SQLITE_PRIVATE (line 33079) | SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, sqlite3 *db, char *...
function SQLITE_API (line 33090) | SQLITE_API sqlite3_str *sqlite3_str_new(sqlite3 *db){
function SQLITE_PRIVATE (line 33105) | SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, v...
function SQLITE_PRIVATE (line 33125) | SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){
function SQLITE_API (line 33138) | SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
function SQLITE_API (line 33162) | SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){
function SQLITE_API (line 33187) | SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zForma...
function SQLITE_API (line 33202) | SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat...
function renderLogMsg (line 33225) | static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){
function SQLITE_API (line 33238) | SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...){
function SQLITE_PRIVATE (line 33253) | SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
function SQLITE_API (line 33279) | SQLITE_API void sqlite3_str_appendf(StrAccum *p, const char *zFormat, ...){
function TreeView (line 33314) | static TreeView *sqlite3TreeViewPush(TreeView *p, u8 moreToFollow){
function sqlite3TreeViewPop (line 33330) | static void sqlite3TreeViewPop(TreeView *p){
function sqlite3TreeViewLine (line 33340) | static void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){
function sqlite3TreeViewItem (line 33367) | static void sqlite3TreeViewItem(TreeView *p, const char *zLabel,u8 moreF...
function SQLITE_PRIVATE (line 33375) | SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView *pView, const With *pWi...
function SQLITE_PRIVATE (line 33414) | SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcLis...
function SQLITE_PRIVATE (line 33452) | SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select ...
function SQLITE_PRIVATE (line 33561) | SQLITE_PRIVATE void sqlite3TreeViewBound(
function SQLITE_PRIVATE (line 33598) | SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window ...
function SQLITE_PRIVATE (line 33625) | SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView *pView, const Window...
function SQLITE_PRIVATE (line 33637) | SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pEx...
function SQLITE_PRIVATE (line 33930) | SQLITE_PRIVATE void sqlite3TreeViewBareExprList(
function SQLITE_PRIVATE (line 33965) | SQLITE_PRIVATE void sqlite3TreeViewExprList(
function SQLITE_WSD (line 34003) | static SQLITE_WSD struct sqlite3PrngType {
function SQLITE_API (line 34012) | SQLITE_API void sqlite3_randomness(int N, void *pBuf){
function SQLITE_PRIVATE (line 34099) | SQLITE_PRIVATE void sqlite3PrngSaveState(void){
function SQLITE_PRIVATE (line 34106) | SQLITE_PRIVATE void sqlite3PrngRestoreState(void){
type SQLiteThread (line 34158) | struct SQLiteThread {
function SQLITE_PRIVATE (line 34167) | SQLITE_PRIVATE int sqlite3ThreadCreate(
function SQLITE_PRIVATE (line 34204) | SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
type SQLiteThread (line 34230) | struct SQLiteThread {
function sqlite3ThreadProc (line 34239) | static unsigned __stdcall sqlite3ThreadProc(
function SQLITE_PRIVATE (line 34262) | SQLITE_PRIVATE int sqlite3ThreadCreate(
function SQLITE_PRIVATE (line 34300) | SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
type SQLiteThread (line 34335) | struct SQLiteThread {
function SQLITE_PRIVATE (line 34342) | SQLITE_PRIVATE int sqlite3ThreadCreate(
function SQLITE_PRIVATE (line 34366) | SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
function SQLITE_PRIVATE (line 34559) | SQLITE_PRIVATE u32 sqlite3Utf8Read(
function sqlite3VdbeMemTranslate (line 34595) | int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
function SQLITE_PRIVATE (line 34740) | SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem){
function SQLITE_PRIVATE (line 34778) | SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *zIn, int nByte){
function SQLITE_PRIVATE (line 34808) | SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char *zIn){
function SQLITE_PRIVATE (line 34832) | SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *db, const void *z, int nBy...
function SQLITE_PRIVATE (line 34853) | SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nChar){
function SQLITE_PRIVATE (line 34878) | SQLITE_PRIVATE void sqlite3UtfSelfTest(void){
function SQLITE_PRIVATE (line 34956) | SQLITE_PRIVATE void sqlite3Coverage(int x){
function SQLITE_PRIVATE (line 34974) | SQLITE_PRIVATE int sqlite3FaultSim(int iTest){
function SQLITE_PRIVATE (line 34987) | SQLITE_PRIVATE int sqlite3IsNaN(double x){
function SQLITE_PRIVATE (line 35035) | SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
function SQLITE_PRIVATE (line 35047) | SQLITE_PRIVATE char *sqlite3ColumnType(Column *pCol, char *zDflt){
function SQLITE_NOINLINE (line 35057) | static SQLITE_NOINLINE void sqlite3ErrorFinish(sqlite3 *db, int err_code){
function SQLITE_PRIVATE (line 35067) | SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code){
function SQLITE_PRIVATE (line 35077) | SQLITE_PRIVATE void sqlite3SystemError(sqlite3 *db, int rc){
function SQLITE_PRIVATE (line 35106) | SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const...
function SQLITE_PRIVATE (line 35139) | SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...
function SQLITE_PRIVATE (line 35173) | SQLITE_PRIVATE void sqlite3Dequote(char *z){
function SQLITE_PRIVATE (line 35195) | SQLITE_PRIVATE void sqlite3DequoteExpr(Expr *p){
function SQLITE_PRIVATE (line 35204) | SQLITE_PRIVATE void sqlite3TokenInit(Token *p, char *z){
function SQLITE_API (line 35222) | SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){
function SQLITE_PRIVATE (line 35230) | SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){
function SQLITE_API (line 35243) | SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, i...
function LONGDOUBLE_TYPE (line 35262) | static LONGDOUBLE_TYPE sqlite3Pow10(int E){
function SQLITE_PRIVATE (line 35317) | SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int lengt...
function compare2pow63 (line 35507) | static int compare2pow63(const char *zNum, int incr){
function SQLITE_PRIVATE (line 35539) | SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length...
function SQLITE_PRIVATE (line 35641) | SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
function SQLITE_PRIVATE (line 35671) | SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){
function SQLITE_PRIVATE (line 35730) | SQLITE_PRIVATE int sqlite3Atoi(const char *z){
function putVarint64 (line 35765) | static int SQLITE_NOINLINE putVarint64(unsigned char *p, u64 v){
function SQLITE_PRIVATE (line 35789) | SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
function SQLITE_PRIVATE (line 35819) | SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
function SQLITE_PRIVATE (line 35990) | SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
function SQLITE_PRIVATE (line 36113) | SQLITE_PRIVATE int sqlite3VarintLen(u64 v){
function SQLITE_PRIVATE (line 36123) | SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){
function SQLITE_PRIVATE (line 36141) | SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){
function SQLITE_PRIVATE (line 36165) | SQLITE_PRIVATE u8 sqlite3HexToInt(int h){
function SQLITE_PRIVATE (line 36183) | SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
function logBadConnection (line 36204) | static void logBadConnection(const char *zType){
function SQLITE_PRIVATE (line 36225) | SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){
function SQLITE_PRIVATE (line 36242) | SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
function SQLITE_PRIVATE (line 36262) | SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
function SQLITE_PRIVATE (line 36282) | SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
function SQLITE_PRIVATE (line 36297) | SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
function SQLITE_PRIVATE (line 36323) | SQLITE_PRIVATE int sqlite3AbsInt32(int x){
function SQLITE_PRIVATE (line 36347) | SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
function SQLITE_PRIVATE (line 36366) | SQLITE_PRIVATE LogEst sqlite3LogEstAdd(LogEst a, LogEst b){
function SQLITE_PRIVATE (line 36393) | SQLITE_PRIVATE LogEst sqlite3LogEst(u64 x){
function SQLITE_PRIVATE (line 36417) | SQLITE_PRIVATE LogEst sqlite3LogEstFromDouble(double x){
function SQLITE_PRIVATE (line 36438) | SQLITE_PRIVATE u64 sqlite3LogEstToInt(LogEst x){
function SQLITE_PRIVATE (line 36492) | SQLITE_PRIVATE VList *sqlite3VListAdd(
function SQLITE_PRIVATE (line 36530) | SQLITE_PRIVATE const char *sqlite3VListNumToName(VList *pIn, int iVal){
function SQLITE_PRIVATE (line 36546) | SQLITE_PRIVATE int sqlite3VListNameToNum(VList *pIn, const char *zName, ...
function SQLITE_PRIVATE (line 36583) | SQLITE_PRIVATE void sqlite3HashInit(Hash *pNew){
function SQLITE_PRIVATE (line 36595) | SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){
function strHash (line 36615) | static unsigned int strHash(const char *z){
function insertElement (line 36632) | static void insertElement(
function rehash (line 36666) | static int rehash(Hash *pH, unsigned int new_size){
function HashElem (line 36707) | static HashElem *findElementWithHash(
function removeElementGivenHash (line 36742) | static void removeElementGivenHash(
function SQLITE_PRIVATE (line 36777) | SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey){
function SQLITE_PRIVATE (line 36797) | SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, void ...
function SQLITE_PRIVATE (line 36843) | SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
Copy disabled (too large)
Download .json
Condensed preview — 2870 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (32,782K chars).
[
{
"path": ".clang-format",
"chars": 2626,
"preview": "---\nBasedOnStyle: LLVM\nAccessModifierOffset: -4\nAlignAfterOpenBracket: Align\nAlignConsecutiveAssignments: false\nAlignCon"
},
{
"path": ".github/stale.yml",
"chars": 680,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 7\n# Number of days of inactivity before a s"
},
{
"path": ".gitignore",
"chars": 611,
"preview": "# Visual Studio Code\n.vscode\n\n# Visual Studio\n.vs\n\n# Android Studio, Gradle\n*.iml\n.gradle\n.idea\n.settings\n.project\n.clas"
},
{
"path": ".gitmodules",
"chars": 250,
"preview": "[submodule \"sqlcipher\"]\n\tpath = sqlcipher\n\turl = https://github.com/Tencent/sqlcipher.git\n[submodule \"openssl\"]\n\tpath = "
},
{
"path": ".swift-version",
"chars": 1,
"preview": "5"
},
{
"path": "CHANGELOG.md",
"chars": 11699,
"preview": "## v2.1.15\n\n* Fix build error on Xcode 26\n* Support Mac Catalyst\n* Fix mmap crash In windows\n* Fix some known bugs\n\n## v"
},
{
"path": "CONTRIBUTING.md",
"chars": 2706,
"preview": "# Contributing to WCDB\nWelcome to [report issues](https://github.com/Tencent/wcdb/issues) or [pull requests](https://git"
},
{
"path": "ISSUE_TEMPLATE.md",
"chars": 395,
"preview": "### The language of WCDB\n\n> e.g. Objective-C, Swift or Java \n\n\n\n### The version of WCDB\n\n> e.g. v1.0.5\n\n\n\n### The platfo"
},
{
"path": "LICENSE",
"chars": 22581,
"preview": "Tencent is pleased to support the open source community by making WCDB available. \n\nCopyright (C) 2017 THL A29 Limited,"
},
{
"path": "Package.swift",
"chars": 12475,
"preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
},
{
"path": "README.md",
"chars": 8254,
"preview": "# WCDB\n\n[](https://github.com/Tencent/wcdb/pulls"
},
{
"path": "VERSION",
"chars": 6,
"preview": "2.1.15"
},
{
"path": "WCDB.cpp.podspec",
"chars": 4495,
"preview": "# pod repo update\n# pod repo remove trunk\n# pod lib lint --verbose --skip-import-validation --allow-warnings WCDB.cpp.po"
},
{
"path": "WCDB.objc.podspec",
"chars": 5901,
"preview": "# pod repo update\n# pod repo remove trunk\n# pod lib lint --verbose --skip-import-validation --allow-warnings WCDB.objc.p"
},
{
"path": "WCDB.podspec",
"chars": 6755,
"preview": "# pod repo update\n# pod repo remove trunk\n# pod lib lint --verbose --skip-import-validation --allow-warnings WCDB.podspe"
},
{
"path": "WCDB.swift.podspec",
"chars": 3952,
"preview": "# pod repo update\n# pod repo remove trunk\n# pod lib lint --verbose --allow-warnings WCDB.swift.podspec --sources='https:"
},
{
"path": "deprecated/android/.gitignore",
"chars": 138,
"preview": "# Visual Studio\n/vsproj/*\n!/vsproj/*.sln\n!/vsproj/*.vcxproj*\n\n# Android Studio, Gradle\n/local.properties\n/build\n/capture"
},
{
"path": "deprecated/android/Android.mk",
"chars": 4831,
"preview": "real_local_path := $(call my-dir)\nroot_path := $(call parent-dir, $(real_local_path))\nprebuilt_path := $(root_path)/andr"
},
{
"path": "deprecated/android/Application.mk",
"chars": 313,
"preview": "LOCAL_PATH:= $(call my-dir)\n\nNDK_PROJECT_PATH := $(LOCAL_PATH)/build\nAPP_BUILD_SCRIPT := $(LOCAL_PATH)/Android.mk\nAPP_AB"
},
{
"path": "deprecated/android/addons/backup/mm_backup.c",
"chars": 26569,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/backup/mm_backup.h",
"chars": 4910,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/backup/mm_recover.c",
"chars": 22810,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/fts/fts3_tokenizer.h",
"chars": 6120,
"preview": "/*\n** 2006 July 10\n**\n** The author disclaims copyright to this source code.\n**\n****************************************"
},
{
"path": "deprecated/android/addons/fts/mm_cipher.c",
"chars": 7890,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/fts/mm_fts.h",
"chars": 1336,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/fts/mm_sqliteext.c",
"chars": 2064,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/fts/mm_tokenizer.c",
"chars": 11872,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/fts/mm_utils.c",
"chars": 1506,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/icucompat/icucompat.c",
"chars": 3949,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/icucompat/icucompat.h",
"chars": 1828,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/icucompat/icuprototype.h",
"chars": 6035,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/icucompat/unicode/alphaindex.h",
"chars": 26997,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2011-2013 Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/appendable.h",
"chars": 8578,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2011-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/basictz.h",
"chars": 8978,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2011, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/bms.h",
"chars": 8890,
"preview": "/*\n * Copyright (C) 1996-2012, International Business Machines Corporation and Others.\n * All rights reserved.\n */\n\n/**\n"
},
{
"path": "deprecated/android/addons/icucompat/unicode/bmsearch.h",
"chars": 7501,
"preview": "/*\n ******************************************************************************\n * Copyright (C) 1996-2011, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/brkiter.h",
"chars": 24817,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/bytestream.h",
"chars": 9382,
"preview": "// Copyright (C) 2009-2012, International Business Machines\n// Corporation and others. All Rights Reserved.\n//\n// Copyri"
},
{
"path": "deprecated/android/addons/icucompat/unicode/bytestrie.h",
"chars": 19655,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/bytestriebuilder.h",
"chars": 6896,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/calendar.h",
"chars": 105227,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/caniter.h",
"chars": 7403,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 1996-2011, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/chariter.h",
"chars": 24279,
"preview": "/*\n********************************************************************\n*\n* Copyright (C) 1997-2011, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/choicfmt.h",
"chars": 28487,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2011, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/coleitr.h",
"chars": 12990,
"preview": "/*\n ******************************************************************************\n * Copyright (C) 1997-2008, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/coll.h",
"chars": 54718,
"preview": "/*\n******************************************************************************\n* Copyright (C) 1996-2012, Internati"
},
{
"path": "deprecated/android/addons/icucompat/unicode/colldata.h",
"chars": 12716,
"preview": "/*\n ******************************************************************************\n * Copyright (C) 1996-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/curramt.h",
"chars": 3659,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2004-2006, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/currpinf.h",
"chars": 7100,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 2009-2011, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/currunit.h",
"chars": 3057,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2004-2006, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/datefmt.h",
"chars": 34483,
"preview": "/*\n ********************************************************************************\n * Copyright (C) 1997-2012, Inter"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dbbi.h",
"chars": 966,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1999-2006 IBM Corp. All righ"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dcfmtsym.h",
"chars": 15576,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/decimfmt.h",
"chars": 99722,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/docmain.h",
"chars": 6428,
"preview": "/********************************************************************\n * COPYRIGHT: \n * Copyright (c) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dtfmtsym.h",
"chars": 30995,
"preview": "/* \n********************************************************************************\n* Copyright (C) 1997-2012, Inter"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dtintrv.h",
"chars": 3734,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2008-2009, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dtitvfmt.h",
"chars": 40184,
"preview": "/********************************************************************************\n* Copyright (C) 2008-2012, Internation"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dtitvinf.h",
"chars": 19010,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 2008-2011, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dtptngen.h",
"chars": 20009,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2011, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/dtrule.h",
"chars": 8718,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2008, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/enumset.h",
"chars": 1784,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 2012, Internationa"
},
{
"path": "deprecated/android/addons/icucompat/unicode/errorcode.h",
"chars": 4784,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2009-2011, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/fieldpos.h",
"chars": 8713,
"preview": "/*\n ********************************************************************************\n * Copyright (C) 1997-2006, Inter"
},
{
"path": "deprecated/android/addons/icucompat/unicode/fmtable.h",
"chars": 22621,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/format.h",
"chars": 12628,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2011, Internati"
},
{
"path": "deprecated/android/addons/icucompat/unicode/fpositer.h",
"chars": 3444,
"preview": "/*\n********************************************************************************\n* Copyright (C) 2010, Internationa"
},
{
"path": "deprecated/android/addons/icucompat/unicode/gender.h",
"chars": 3095,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2008-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/gregocal.h",
"chars": 34078,
"preview": "/*\n* Copyright (C) 1997-2012, International Business Machines Corporation and others.\n* All Rights Reserved.\n***********"
},
{
"path": "deprecated/android/addons/icucompat/unicode/icudataver.h",
"chars": 990,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 2009-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/icuplug.h",
"chars": 11770,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 2009-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/idna.h",
"chars": 12981,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/listformatter.h",
"chars": 4070,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2012, Internation"
},
{
"path": "deprecated/android/addons/icucompat/unicode/localpointer.h",
"chars": 9351,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2009-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/locdspnm.h",
"chars": 7309,
"preview": "/*\n******************************************************************************\n* Copyright (C) 2010-2012, Internation"
},
{
"path": "deprecated/android/addons/icucompat/unicode/locid.h",
"chars": 31216,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1996-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/measfmt.h",
"chars": 1984,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2004-2011, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/measunit.h",
"chars": 1635,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2004-2006, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/measure.h",
"chars": 3321,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2004-2006, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/messagepattern.h",
"chars": 34411,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2011-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/msgfmt.h",
"chars": 44634,
"preview": "/*\n* Copyright (C) 2007-2012, International Business Machines Corporation and\n* others. All Rights Reserved.\n***********"
},
{
"path": "deprecated/android/addons/icucompat/unicode/normalizer2.h",
"chars": 29018,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2009-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/normlzr.h",
"chars": 29961,
"preview": "/*\n ********************************************************************\n * COPYRIGHT:\n * Copyright (c) 1996-2011, Inter"
},
{
"path": "deprecated/android/addons/icucompat/unicode/numfmt.h",
"chars": 44637,
"preview": "/*\n********************************************************************************\n* Copyright (C) 1997-2012, Internati"
},
{
"path": "deprecated/android/addons/icucompat/unicode/numsys.h",
"chars": 5498,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2011, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/parseerr.h",
"chars": 3044,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1999-2005, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/parsepos.h",
"chars": 5468,
"preview": "/*\n* Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved.\n*************"
},
{
"path": "deprecated/android/addons/icucompat/unicode/platform.h",
"chars": 24815,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/plurfmt.h",
"chars": 25175,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/plurrule.h",
"chars": 14912,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2008-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ptypes.h",
"chars": 3441,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1997-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/putil.h",
"chars": 5742,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1997-2011, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/rbbi.h",
"chars": 29853,
"preview": "/*\n***************************************************************************\n* Copyright (C) 1999-2012 International"
},
{
"path": "deprecated/android/addons/icucompat/unicode/rbnf.h",
"chars": 46409,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 1997-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/rbtz.h",
"chars": 15695,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2008, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/regex.h",
"chars": 85094,
"preview": "/*\n**********************************************************************\n* Copyright (C) 2002-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/rep.h",
"chars": 9559,
"preview": "/*\n**************************************************************************\n* Copyright (C) 1999-2005, International B"
},
{
"path": "deprecated/android/addons/icucompat/unicode/resbund.h",
"chars": 18324,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1996-2011, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/schriter.h",
"chars": 6293,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1998-2005, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/search.h",
"chars": 22629,
"preview": "/*\n**********************************************************************\n* Copyright (C) 2001-2011 IBM and others. Al"
},
{
"path": "deprecated/android/addons/icucompat/unicode/selfmt.h",
"chars": 14466,
"preview": "/********************************************************************\n * COPYRIGHT:\n * Copyright (c) 1997-2011, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/simpletz.h",
"chars": 46179,
"preview": "/*\n ********************************************************************************\n * Copyright (C) 1997-2011, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/smpdtfmt.h",
"chars": 58960,
"preview": "/*\n* Copyright (C) 1997-2012, International Business Machines Corporation and\n* others. All Rights Reserved.\n***********"
},
{
"path": "deprecated/android/addons/icucompat/unicode/sortkey.h",
"chars": 11241,
"preview": "/*\n *****************************************************************************\n * Copyright (C) 1996-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/std_string.h",
"chars": 783,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2009-2011, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/strenum.h",
"chars": 10154,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2002-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/stringpiece.h",
"chars": 6529,
"preview": "// Copyright (C) 2009-2012, International Business Machines\n// Corporation and others. All Rights Reserved.\n//\n// Copyri"
},
{
"path": "deprecated/android/addons/icucompat/unicode/stringtriebuilder.h",
"chars": 15107,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/stsearch.h",
"chars": 22287,
"preview": "/*\n**********************************************************************\n* Copyright (C) 2001-2008 IBM and others. Al"
},
{
"path": "deprecated/android/addons/icucompat/unicode/symtable.h",
"chars": 4199,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2000-2005, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/tblcoll.h",
"chars": 35054,
"preview": "/*\n******************************************************************************\n* Copyright (C) 1996-2012, Internation"
},
{
"path": "deprecated/android/addons/icucompat/unicode/timezone.h",
"chars": 38175,
"preview": "/*************************************************************************\n* Copyright (c) 1997-2012, International Busi"
},
{
"path": "deprecated/android/addons/icucompat/unicode/tmunit.h",
"chars": 3471,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 2009-2010, Google, "
},
{
"path": "deprecated/android/addons/icucompat/unicode/tmutamt.h",
"chars": 4805,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 2009-2010, Google, "
},
{
"path": "deprecated/android/addons/icucompat/unicode/tmutfmt.h",
"chars": 8714,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 2008-2012, Google, "
},
{
"path": "deprecated/android/addons/icucompat/unicode/translit.h",
"chars": 55054,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1999-2012, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/tzfmt.h",
"chars": 32825,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2011-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/tznames.h",
"chars": 15187,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2011-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/tzrule.h",
"chars": 36057,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2008, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/tztrans.h",
"chars": 6101,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2008, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ubidi.h",
"chars": 90698,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1999-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ubrk.h",
"chars": 19592,
"preview": "/*\n******************************************************************************\n* Copyright (C) 1996-2012, Internation"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucal.h",
"chars": 51703,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 1996-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucasemap.h",
"chars": 16844,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2005-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucat.h",
"chars": 5371,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2003-2004, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uchar.h",
"chars": 118200,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1997-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucharstrie.h",
"chars": 21297,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucharstriebuilder.h",
"chars": 6993,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uchriter.h",
"chars": 13132,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1998-2005, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uclean.h",
"chars": 10630,
"preview": "/*\n******************************************************************************\n* Copyright (C) 2001-2012, Internation"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucnv.h",
"chars": 84578,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1999-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucnv_cb.h",
"chars": 6635,
"preview": "/*\n**********************************************************************\n* Copyright (C) 2000-2004, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucnv_err.h",
"chars": 21375,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1999-2009, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucnvsel.h",
"chars": 6170,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2008-2011, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucol.h",
"chars": 59319,
"preview": "/*\n*******************************************************************************\n* Copyright (c) 1996-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucoleitr.h",
"chars": 12540,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2001-2011, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uconfig.h",
"chars": 11045,
"preview": "/* \n**********************************************************************\n* Copyright (C) 2002-2012, International B"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucsdet.h",
"chars": 12905,
"preview": "/*\n **********************************************************************\n * Copyright (C) 2005-2010, International B"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ucurr.h",
"chars": 13272,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2002-2012, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/udat.h",
"chars": 47590,
"preview": "/*\n *******************************************************************************\n * Copyright (C) 1996-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/udata.h",
"chars": 15169,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1999-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/udateintervalformat.h",
"chars": 6651,
"preview": "/*\n*****************************************************************************************\n* Copyright (C) 2010-2012, "
},
{
"path": "deprecated/android/addons/icucompat/unicode/udatpg.h",
"chars": 23802,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2007-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/udisplaycontext.h",
"chars": 4449,
"preview": "/*\n*****************************************************************************************\n* Copyright (C) 2012, Inter"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uenum.h",
"chars": 7976,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2002-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ugender.h",
"chars": 1894,
"preview": "/*\n*****************************************************************************************\n* Copyright (C) 2010-2012, "
},
{
"path": "deprecated/android/addons/icucompat/unicode/uidna.h",
"chars": 33601,
"preview": "/*\n *******************************************************************************\n *\n * Copyright (C) 2003-2012, Int"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uiter.h",
"chars": 23209,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2002-2011 Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uldnames.h",
"chars": 10753,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uloc.h",
"chars": 45126,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1997-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ulocdata.h",
"chars": 10622,
"preview": "/*\n******************************************************************************\n* "
},
{
"path": "deprecated/android/addons/icucompat/unicode/umachine.h",
"chars": 10472,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 1999-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/umisc.h",
"chars": 1255,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1999-2006, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/umsg.h",
"chars": 24702,
"preview": "/********************************************************************\n * COPYRIGHT: \n * Copyright (c) 1997-2011, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/unifilt.h",
"chars": 3600,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1999-2010, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/unifunct.h",
"chars": 3966,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2002-2005, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/unimatch.h",
"chars": 6071,
"preview": "/*\n* Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved.\n*************"
},
{
"path": "deprecated/android/addons/icucompat/unicode/unirepl.h",
"chars": 3290,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2002-2005, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uniset.h",
"chars": 64583,
"preview": "/*\n***************************************************************************\n* Copyright (C) 1999-2011, International "
},
{
"path": "deprecated/android/addons/icucompat/unicode/unistr.h",
"chars": 168276,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1998-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/unorm.h",
"chars": 23439,
"preview": "/*\n*******************************************************************************\n* Copyright (c) 1996-2010, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/unorm2.h",
"chars": 22439,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2009-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/unum.h",
"chars": 40154,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 1997-2012, Internatio"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uobject.h",
"chars": 12547,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 2002-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/upluralrules.h",
"chars": 4573,
"preview": "/*\n*****************************************************************************************\n* Copyright (C) 2010-2012, "
},
{
"path": "deprecated/android/addons/icucompat/unicode/uregex.h",
"chars": 73183,
"preview": "/*\n**********************************************************************\n* Copyright (C) 2004-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/urename.h",
"chars": 123780,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2002-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/urep.h",
"chars": 5394,
"preview": "/*\n******************************************************************************\n* Copyright (C) 1997-2010, Internati"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ures.h",
"chars": 36781,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1997-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uscript.h",
"chars": 20947,
"preview": "/*\n **********************************************************************\n * Copyright (C) 1997-2012, International B"
},
{
"path": "deprecated/android/addons/icucompat/unicode/usearch.h",
"chars": 36957,
"preview": "/*\n**********************************************************************\n* Copyright (C) 2001-2011 IBM and others. Al"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uset.h",
"chars": 40396,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2002-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/usetiter.h",
"chars": 9606,
"preview": "/*\n**********************************************************************\n* Copyright (c) 2002-2008, International Busin"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ushape.h",
"chars": 18749,
"preview": "/*\n******************************************************************************\n*\n* Copyright (C) 2000-2012, Interna"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uspoof.h",
"chars": 39840,
"preview": "/*\n***************************************************************************\n* Copyright (C) 2008-2012, International "
},
{
"path": "deprecated/android/addons/icucompat/unicode/usprep.h",
"chars": 8215,
"preview": "/*\n *******************************************************************************\n *\n * Copyright (C) 2003-2010, Int"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ustring.h",
"chars": 74758,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1998-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/ustringtrie.h",
"chars": 3114,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2010-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utext.h",
"chars": 59359,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2004-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utf.h",
"chars": 7822,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 1999-2011, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utf16.h",
"chars": 18674,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 1999-2011, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utf32.h",
"chars": 653,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 1999-2001, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utf8.h",
"chars": 23568,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 1999-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utf_old.h",
"chars": 43518,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2002-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utmscale.h",
"chars": 13689,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2004 - 2008, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utrace.h",
"chars": 13406,
"preview": "/*\n*******************************************************************************\n*\n* Copyright (C) 2003-2012, Intern"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utrans.h",
"chars": 23633,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 1997-2011, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/utypes.h",
"chars": 31460,
"preview": "/*\n**********************************************************************\n* Copyright (C) 1996-2012, International Bus"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uvernum.h",
"chars": 5962,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2000-2012, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/uversion.h",
"chars": 6445,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2000-2011, Internat"
},
{
"path": "deprecated/android/addons/icucompat/unicode/vtzone.h",
"chars": 20570,
"preview": "/*\n*******************************************************************************\n* Copyright (C) 2007-2012, Internatio"
},
{
"path": "deprecated/android/addons/repair/SQLiteRepairKit.h",
"chars": 7809,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk.c",
"chars": 11581,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk.h",
"chars": 1601,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk_api.c",
"chars": 4599,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk_btree.c",
"chars": 21972,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk_output.cpp",
"chars": 43107,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk_pager.c",
"chars": 18505,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk_pager.h",
"chars": 4208,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
},
{
"path": "deprecated/android/addons/repair/sqliterk_values.c",
"chars": 10692,
"preview": "/*\n * Tencent is pleased to support the open source community by making\n * WCDB available.\n *\n * Copyright (C) 2017 THL "
}
]
// ... and 2670 more files (download for full content)
About this extraction
This page contains the full source code of the Tencent/wcdb GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2870 files (83.3 MB), approximately 8.1M tokens, and a symbol index with 17254 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.