{"id":41836296,"url":"https://github.com/tidesdb/tidesql","last_synced_at":"2026-04-02T19:23:41.609Z","repository":{"id":334510657,"uuid":"1141333090","full_name":"tidesdb/tidesql","owner":"tidesdb","description":"A highly scalable, concurrent, space and write optimized pluggable MariaDB engine.","archived":false,"fork":false,"pushed_at":"2026-03-29T03:34:06.000Z","size":57520,"stargazers_count":13,"open_issues_count":3,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-29T03:46:18.022Z","etag":null,"topics":["btree","cloud-native","lsmtree","mariadb","mvcc","object-storage","olap","oltp","optimistic","pessimistic-concurrency","sql","storage-engine","transactional"],"latest_commit_sha":null,"homepage":"https://tidesdb.com","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tidesdb.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":"CONTRIBUTING","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":"CLA"}},"created_at":"2026-01-24T17:13:20.000Z","updated_at":"2026-03-28T18:29:12.000Z","dependencies_parsed_at":"2026-02-14T08:03:28.156Z","dependency_job_id":null,"html_url":"https://github.com/tidesdb/tidesql","commit_stats":null,"previous_names":["tidesdb/tidesql"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/tidesdb/tidesql","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidesdb%2Ftidesql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidesdb%2Ftidesql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidesdb%2Ftidesql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidesdb%2Ftidesql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tidesdb","download_url":"https://codeload.github.com/tidesdb/tidesql/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidesdb%2Ftidesql/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31314375,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["btree","cloud-native","lsmtree","mariadb","mvcc","object-storage","olap","oltp","optimistic","pessimistic-concurrency","sql","storage-engine","transactional"],"created_at":"2026-01-25T09:09:06.833Z","updated_at":"2026-04-02T19:23:41.600Z","avatar_url":"https://github.com/tidesdb.png","language":"C++","readme":"TIDESQL\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nA pluggable write and space optimized storage engine for MariaDB using TidesDB.\n\nThe pluggable engine is tested and supported on MariaDB 11.x, 12.x.\n\n\nINSTALLATION\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nYou can choose to run install.sh, for instructions run ./install.sh --help\n\nTo install in a specific location(e.g /data being NVMe disk)\n./install.sh --mariadb-prefix /data/mariadb --tidesdb-prefix /data/tidesdb --build-dir /data/tidesql-build\n\n\nThe install script will build TidesDB and MariaDB from source.\nYou can specify the versions if you want.  The script will install everything\nand make TidesDB available as an engine to utilize.\n\nTo skip storage engines you don't need (saves build time and reduces warnings):\n\n./install.sh --list-engines                       # see what can be skipped\n./install.sh --skip-engines mroonga,rocksdb,connect,spider,oqgraph,columnstore\n\nSkippable engines:\n  archive        Archive storage engine (read-only row-format tables)\n  blackhole      Blackhole engine (accepts writes, stores nothing)\n  columnstore    MariaDB ColumnStore (columnar analytics engine)\n  connect        CONNECT engine (access external data sources)\n  example        Example storage engine (test/demo only)\n  federated      Legacy Federated engine (MODULE_ONLY)\n  federatedx     FederatedX engine (query remote MySQL/MariaDB tables)\n  mroonga        Mroonga full-text search engine (requires Groonga)\n  oqgraph        Open Query GRAPH engine (graph computation)\n  rocksdb        MyRocks / RocksDB LSM-tree engine\n  sequence       Sequence engine (virtual auto-increment sequences)\n  sphinx         SphinxSE engine (Sphinx full-text search integration)\n  spider         Spider engine (sharding / federation)\n\nInnoDB, Aria, MyISAM, and CSV cannot be skipped (server depends on them).\n\nBelow are manual install instructions for those who want to configure everything\nthemselves, though with the install script you can modify configuration files\nafter the fact.\n\nLINUX (Ubuntu/Debian)\n░░░░░░░░░░░░░░░░░░░░░░░░\n\n1. Install dependencies:\n\n   sudo apt update\n   sudo apt install -y build-essential cmake ninja-build bison flex \\\n     libzstd-dev liblz4-dev libsnappy-dev libncurses-dev libssl-dev \\\n     libxml2-dev libevent-dev libcurl4-openssl-dev pkg-config\n\n2. Install TidesDB library:\n\n   git clone --depth 1 https://github.com/tidesdb/tidesdb.git tidesdb-lib\n   cd tidesdb-lib \u0026\u0026 mkdir build \u0026\u0026 cd build\n   cmake ..\n   make -j$(nproc)\n   sudo make install\n   sudo ldconfig\n\n3. Clone MariaDB and copy TidesDB storage engine:\n\n   git clone --depth 1 --branch mariadb-12.2.2 https://github.com/MariaDB/server.git mariadb-server\n   cd mariadb-server\n   git submodule update --init --recursive\n   cp -r /path/to/tidesql/tidesdb storage/\n   cp -r /path/to/tidesql/mysql-test/suite/tidesdb mysql-test/suite/\n\n4. Build MariaDB:\n\n   mkdir build \u0026\u0026 cd build\n   cmake ..\n   make -j$(nproc)\n\n5. Run tests (from the build directory):\n\n   cd mysql-test\n   perl mtr --suite=tidesdb --parallel=4 --force\n\n\nMACOS\n░░░░░░░░░░░░░░░░░░░░░░░░\n\n1. Install dependencies:\n\n   brew install cmake ninja bison snappy lz4 zstd openssl@3\n\n2. Install TidesDB library:\n\n   # Ensure Xcode SDK is used (not CommandLineTools)\n   sudo xcode-select -s /Applications/Xcode.app/Contents/Developer\n   export SDKROOT=$(xcrun --show-sdk-path)\n\n   git clone --depth 1 https://github.com/tidesdb/tidesdb.git tidesdb-lib\n   cd tidesdb-lib \u0026\u0026 mkdir build \u0026\u0026 cd build\n   cmake .. -DCMAKE_OSX_SYSROOT=${SDKROOT} -DOPENSSL_ROOT_DIR=$(brew --prefix openssl@3)\n   make -j$(sysctl -n hw.ncpu)\n   sudo make install\n\n3. Clone MariaDB and copy TidesDB storage engine:\n\n   git clone --depth 1 --branch mariadb-12.2.2 https://github.com/MariaDB/server.git mariadb-server\n   cd mariadb-server\n   git submodule update --init --recursive\n   cp -r /path/to/tidesql/tidesdb storage/\n   cp -r /path/to/tidesql/mysql-test/suite/tidesdb mysql-test/suite/\n\n4. Build MariaDB:\n\n   # Remove CommandLineTools SDK to prevent header conflicts\n   sudo rm -rf /Library/Developer/CommandLineTools/SDKs/MacOSX*.sdk\n\n   export SDKROOT=$(xcrun --show-sdk-path)\n   export CC=$(xcrun -find clang)\n   export CXX=$(xcrun -find clang++)\n\n   mkdir build \u0026\u0026 cd build\n   cmake .. \\\n     -DCMAKE_C_COMPILER=${CC} \\\n     -DCMAKE_CXX_COMPILER=${CXX} \\\n     -DCMAKE_OSX_SYSROOT=${SDKROOT} \\\n     -DCMAKE_C_FLAGS=\"-Wno-nullability-completeness\" \\\n     -DCMAKE_CXX_FLAGS=\"-Wno-nullability-completeness\" \\\n     -DWITH_SSL=bundled \\\n     -DWITH_PCRE=bundled \\\n     -G Ninja\n   cmake --build . --parallel $(sysctl -n hw.ncpu)\n\n   Note: The CommandLineTools SDK removal is needed because CMake may find\n   headers in /Library/Developer/CommandLineTools/SDKs/MacOSX*.sdk which\n   causes C/C++ header path conflicts with libc++.\n\n5. Run tests (from the build directory):\n\n   cd mysql-test\n   perl mtr --suite=tidesdb --parallel=4 --force\n\n\nWINDOWS\n░░░░░░░░░░░░░░░░░░░░░░░░\n\n1. Install prerequisites:\n\n   - Visual Studio 2022 with C++ workload\n   - CMake (choco install cmake)\n   - Strawberry Perl (choco install strawberryperl)\n   - WinFlexBison (download from GitHub releases)\n\n2. Install vcpkg dependencies:\n\n   cd C:\\vcpkg\n   git pull\n   .\\vcpkg.exe install zstd:x64-windows lz4:x64-windows snappy:x64-windows pthreads:x64-windows\n\n3. Install TidesDB library:\n\n   git clone --depth 1 https://github.com/tidesdb/tidesdb.git tidesdb-lib\n   cd tidesdb-lib\n   mkdir build \u0026\u0026 cd build\n   cmake .. -G \"Visual Studio 17 2022\" -A x64 ^\n     -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake ^\n     -DCMAKE_INSTALL_PREFIX=C:/tidesdb\n   cmake --build . --config Release\n   cmake --install . --config Release\n\n4. Clone MariaDB and copy TidesDB storage engine:\n\n   git clone --depth 1 --branch mariadb-12.2.2 https://github.com/MariaDB/server.git mariadb-server\n   cd mariadb-server\n   git submodule update --init --recursive\n   xcopy /E /I path\\to\\tidesql\\tidesdb storage\\tidesdb\n   xcopy /E /I path\\to\\tidesql\\mysql-test\\suite\\tidesdb mysql-test\\suite\\tidesdb\n\n5. Build MariaDB:\n\n   mkdir build \u0026\u0026 cd build\n   cmake .. -G \"Visual Studio 17 2022\" -A x64 ^\n     -DCMAKE_PREFIX_PATH=\"C:/tidesdb;C:/vcpkg/installed/x64-windows\" ^\n     -DCONNECT_DYNAMIC=NO\n   cmake --build . --config RelWithDebInfo --parallel\n\n   Note: CONNECT plugin is disabled (-DCONNECT_DYNAMIC=NO) because it\n   requires libxml2 headers that may conflict with vcpkg installations.\n\n6. Run tests:\n\n   cd mysql-test\n   perl mtr --suite=tidesdb --parallel=4 --force\n\n\nENABLE PLUGIN\n░░░░░░░░░░░░░░░░░░░░░░░░\n\nAfter building, enable the plugin in MariaDB:\n\n   INSTALL SONAME 'ha_tidesdb';  -- works on all platforms\n\n\n\nFEATURES\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nCore:\n- MVCC transactions with per-table isolation (autocommit uses READ_COMMITTED;\n  multi-statement transactions use the table's configured level)\n- SQL savepoints (SAVEPOINT / ROLLBACK TO / RELEASE SAVEPOINT)\n- START TRANSACTION WITH CONSISTENT SNAPSHOT\n- Lock-free concurrency (no THR_LOCK, TidesDB handles isolation internally)\n- Optional pessimistic row locking (tidesdb_pessimistic_locking=ON) for\n  workloads that depend on row-level serialization (e.g. TPC-C).\n  Locks are acquired by SELECT ... FOR UPDATE, UPDATE, DELETE, and INSERT\n- LSM-tree storage with optional B+tree SSTable format\n- Compression (NONE, LZ4, LZ4_FAST, ZSTD, Snappy)\n- Bloom filters for fast key lookups\n- Block cache for frequently accessed data\n- Primary key (single and composite) and secondary index support\n- Index Condition Pushdown (ICP) for secondary index scans\n- REPLACE INTO and INSERT ... ON DUPLICATE KEY UPDATE\n- AUTO_INCREMENT with O(1) atomic counter (no iterator per INSERT)\n- TTL (time-to-live) per-row and per-table expiration\n- Virtual/generated columns\n- Online backup (SET GLOBAL tidesdb_backup_dir = '/path')\n- Hard-link checkpoint (SET GLOBAL tidesdb_checkpoint_dir = '/path')\n- OPTIMIZE TABLE (synchronous purge + compact via tidesdb_purge_cf)\n- CHECK TABLE (verifies SSTable metadata and block integrity)\n- REPAIR TABLE (full purge + compaction, rebuilds LSM tree)\n- FLUSH TABLES FOR EXPORT (HA_CAN_EXPORT, consistent file copy)\n- Semi-consistent read (optimistic reads for UPDATE/DELETE at READ_COMMITTED)\n- SHOW ENGINE TIDESDB STATUS (DB stats, memory, cache, conflict info)\n- SHOW GLOBAL STATUS LIKE 'tidesdb%' (21 machine-readable status variables\n  for monitoring tools: Prometheus, PMM, Datadog, etc.)\n- Partitioning (RANGE, LIST, HASH, KEY)\n- Data-at-rest encryption (MariaDB encryption plugin integration)\n- Online DDL (instant metadata, inplace add/drop index, copy for columns)\n- TRUNCATE TABLE as O(1) drop+recreate (instant regardless of table size)\n- ANALYZE TABLE with detailed CF statistics (levels, keys, sizes, cache hit rate)\n- Cached optimizer statistics (refreshed every 2 seconds from TidesDB)\n- Full-text search (FULLTEXT indexes with BM25 ranking, natural language\n  and boolean mode, charset-aware tokenizer, configurable BM25 parameters,\n  stop words matching InnoDB defaults, blend_chars for Romance language\n  elision support, extended FT API via HA_CAN_FULLTEXT_EXT)\n- Vector search (VECTOR indexes via MariaDB's MHNSW approximate nearest\n  neighbor, Euclidean and cosine distance, INSERT/UPDATE/DELETE support)\n- Spatial indexes (SPATIAL KEY with Hilbert curve encoding on LSM,\n  MBRIntersects/MBRContains/MBRWithin/MBREquals/MBRDisjoint predicates)\n\nCloud / Object Store:\n- S3-compatible object store backend (AWS S3, MinIO, GCS)\n- Four-tier hot/warm/cold/frozen storage hierarchy\n- Block-level range_get for point lookups on frozen SSTables (single HTTP request)\n- Parallel SSTable prefetch for iterators\n- Read-only replica mode with MANIFEST sync and WAL replay\n- Primary promotion via SET GLOBAL tidesdb_promote_primary = ON\n- Configurable WAL sync (per-commit for RPO=0, or bytes-threshold)\n- LRU local file cache with paired klog/vlog eviction\n- Upload retry with verification, download retry with backoff\n- Kubernetes deployment with automated failover (see k8s/ directory)\n\n\nCONFIGURATION\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nTidesDB stores its data as a sibling of the MariaDB data directory:\n  \u003cparent_of_datadir\u003e/tidesdb_data\n\n\nSYSTEM VARIABLES (SET GLOBAL tidesdb_...)\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nRead-only (set at startup):\n\n  flush_threads             Background flush threads (default: 4)\n  compaction_threads        Background compaction threads (default: 4)\n  log_level                 DEBUG/INFO/WARN/ERROR/FATAL/NONE (default: DEBUG)\n  block_cache_size          Global block cache in bytes (default: 256MB)\n  max_open_sstables         Max cached SSTable files (default: 256)\n  max_memory_usage          Global memory limit in bytes; 0 = auto (default: 0)\n  data_home_dir             Override TidesDB data directory (default: auto)\n  log_to_file               Write logs to file vs stderr (default: ON)\n  log_truncation_at         Log file truncation size (default: 24MB; 0 = off)\n  unified_memtable          Single shared WAL+memtable across all CFs (default: ON)\n  unified_memtable_write_buffer_size  Write buffer for unified memtable (default: 128MB)\n  unified_memtable_sync_mode         NONE/INTERVAL/FULL for unified WAL (default: FULL)\n  unified_memtable_sync_interval     Sync interval in µs for INTERVAL mode (default: 128000)\n  object_store_backend      LOCAL or S3 (default: LOCAL)\n  s3_endpoint               S3 endpoint (e.g. s3.amazonaws.com)\n  s3_bucket                 S3 bucket name\n  s3_prefix                 S3 key prefix (e.g. production/db1/)\n  s3_access_key             S3 access key ID\n  s3_secret_key             S3 secret access key\n  s3_region                 S3 region (NULL for MinIO)\n  s3_use_ssl                Use HTTPS (default: ON)\n  s3_path_style             Path-style URLs for MinIO (default: OFF)\n  objstore_local_cache_max  Local cache size limit (default: 0 = unlimited)\n  objstore_wal_sync_threshold  WAL sync byte threshold (default: 1MB)\n  objstore_wal_sync_on_commit  Upload WAL on every commit (default: OFF)\n  replica_mode              Read-only replica (default: OFF)\n  replica_sync_interval     MANIFEST poll interval in us (default: 5000000)\n\nDynamic (SET GLOBAL at runtime):\n\n  backup_dir                Set to a path to trigger online backup\n  checkpoint_dir            Set to a path to trigger hard-link checkpoint\n  print_all_conflicts       Log all TDB_ERR_CONFLICT events (default: OFF)\n  pessimistic_locking       Enable plugin-level row locks for SELECT...FOR UPDATE,\n                            UPDATE, DELETE, and INSERT (default: OFF). All\n                            write-intent statements acquire per-row locks,\n                            including autocommit. Uses a partitioned hash-table\n                            lock manager with wait-for-graph deadlock detection.\n                            Locks can cover non-existing PK values. Enable for\n                            TPC-C or workloads needing row-level serialization.\n  promote_primary           Set to ON to promote a replica to primary\n                            (trigger variable, resets to OFF after promotion)\n  fts_min_word_len          Minimum word length for FTS indexing (default: 3)\n  fts_max_word_len          Maximum word length for FTS indexing (default: 84)\n  fts_bm25_k1               BM25 k1 term-frequency saturation (default: 1.2)\n  fts_bm25_b                BM25 b document-length normalization (default: 0.75)\n  ft_stopword_table         Custom stop word table 'db/table' (default: NULL = InnoDB defaults)\n  fts_blend_chars           Blend characters for Romance elision (default: empty)\n\nSession (SET SESSION tidesdb_...):\n\n  ttl                       Per-session TTL override in seconds (default: 0)\n  skip_unique_check         Skip PK/unique checks on INSERT (default: OFF)\n  default_compression       Default compression for new tables\n  default_write_buffer_size Default write buffer for new tables (128MB)\n  default_sync_mode         Default sync mode for new tables (FULL)\n  (and other default_* variables for all table options)\n\nLogging: TidesDB writes to \u003ctidesdb_data\u003e/LOG by default with automatic\ntruncation at 24 MB.  Set log_level to WARN or higher in production to\nreduce log volume.\n\n\nTABLE OPTIONS (CREATE TABLE ... ENGINE=TidesDB \u003coption\u003e=\u003cvalue\u003e)\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nThese are per-table options set at creation time and applied to the column\nfamily configuration.  ALTER TABLE ... \u003coption\u003e=\u003cvalue\u003e updates both the .frm\nand the live column family via tidesdb_cf_update_runtime_config().\n\nStorage:\n  WRITE_BUFFER_SIZE         Memtable size before flush (default: 128MB)\n  MIN_DISK_SPACE            Minimum free disk space (default: 100MB)\n  KLOG_VALUE_THRESHOLD      Values larger than this go to vlog (default: 512)\n\nCompression:\n  COMPRESSION               NONE/SNAPPY/LZ4/ZSTD/LZ4_FAST (default: LZ4)\n\nBloom Filters:\n  BLOOM_FILTER              Enable bloom filters (default: ON)\n  BLOOM_FPR                 FPR in parts per 10000; 100 = 1% (default: 100)\n\nDurability:\n  SYNC_MODE                 NONE/INTERVAL/FULL (default: FULL)\n  SYNC_INTERVAL_US          Sync interval in microseconds (default: 128000)\n\nIsolation:\n  ISOLATION_LEVEL           READ_UNCOMMITTED/READ_COMMITTED/REPEATABLE_READ/\n                            SNAPSHOT/SERIALIZABLE (default: REPEATABLE_READ)\n\nLSM Tree:\n  USE_BTREE                 Use B+tree SSTable format (default: OFF)\n  LEVEL_SIZE_RATIO          Level size multiplier (default: 10)\n  MIN_LEVELS                Minimum LSM levels (default: 5)\n  DIVIDING_LEVEL_OFFSET     Compaction dividing level offset (default: 2)\n  L1_FILE_COUNT_TRIGGER     L1 file count trigger for compaction (default: 4)\n  L0_QUEUE_STALL_THRESHOLD  L0 queue stall threshold (default: 20)\n\nSkip List:\n  SKIP_LIST_MAX_LEVEL       Max skip list level (default: 12)\n  SKIP_LIST_PROBABILITY     Percentage; 25 = 0.25 (default: 25)\n\nBlock Indexes:\n  BLOCK_INDEXES             Enable block indexes (default: ON)\n  INDEX_SAMPLE_RATIO        Sample ratio for block index (default: 1)\n  BLOCK_INDEX_PREFIX_LEN    Block index prefix length (default: 16)\n\nTTL:\n  TTL                       Default TTL in seconds, 0 = none (default: 0)\n\nObject Store:\n  OBJECT_LAZY_COMPACTION    Double L1 compaction trigger in S3 mode (default: OFF)\n  OBJECT_PREFETCH_COMPACTION Prefetch inputs before merge in S3 mode (default: ON)\n\nEncryption:\n  ENCRYPTED                 Enable data-at-rest encryption (default: OFF)\n  ENCRYPTION_KEY_ID         Encryption key ID (default: 1)\n\n\nFIELD OPTIONS (per-column)\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\n  TTL                       Marks column as per-row TTL source (seconds)\n\nExample:\n  CREATE TABLE t (\n    id INT PRIMARY KEY,\n    data VARCHAR(100),\n    expires INT TTL=1\n  ) ENGINE=TIDESDB TTL=3600 SYNC_MODE='NONE' COMPRESSION='ZSTD';\n\n\nTESTING\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nRun all TidesDB tests (from the build directory):\n\n  cd mysql-test\n  perl mtr --suite=tidesdb\n\nRun specific test:\n\n  perl mtr --suite=tidesdb tidesdb_crud\n\nAvailable tests (48 total, 280+ cases):\n  tidesdb_alter_crash         Crash safety during ALTER TABLE operations\n  tidesdb_analyze             ANALYZE TABLE with CF statistics output\n  tidesdb_auto_increment      AUTO_INCREMENT edge cases (gaps, rollback, explicit values)\n  tidesdb_backup              Online backup via tidesdb_backup_dir\n  tidesdb_concurrent_conflict Concurrent write-write conflict handling\n  tidesdb_concurrent_errors   Multi-connection error handling and recovery\n  tidesdb_checkpoint          Hard-link checkpoint via tidesdb_checkpoint_dir\n  tidesdb_consistent_snapshot START TRANSACTION WITH CONSISTENT SNAPSHOT\n  tidesdb_crud                Basic CRUD operations\n  tidesdb_data_home_dir       tidesdb_data_home_dir sysvar\n  tidesdb_drop_create         Repeated DROP/CREATE/TRUNCATE cycles\n  tidesdb_encryption          Data-at-rest encryption\n  tidesdb_engine_convert      InnoDB \u003c-\u003e TidesDB engine migration (ALTER TABLE ENGINE)\n  tidesdb_engine_status       SHOW ENGINE TIDESDB STATUS\n  tidesdb_fulltext            Full-text search (FULLTEXT indexes, BM25, boolean mode)\n  tidesdb_fulltext_phrase     FTS phrase queries (\"exact phrase\") and wildcard edge cases\n  tidesdb_fts_stopwords       FTS stop word filtering (default InnoDB stop words)\n  tidesdb_fts_blend_chars     FTS blend characters (Italian/French elision, O'Malley)\n  tidesdb_hidden_pk           Tables without explicit PK (hidden auto-generated row ID)\n  tidesdb_index_stats         Index statistics and optimizer cost model\n  tidesdb_info_schema         information_schema integration\n  tidesdb_insert_conflict     Duplicate key detection and handling\n  tidesdb_isolation           Isolation level behavior\n  tidesdb_json                JSON querying + generated-column JSON indexing\n  tidesdb_large_blob          Large BLOB/TEXT values (\u003e 64KB, klog_value_threshold)\n  tidesdb_load_data           Bulk insert path (multi-row INSERT, INSERT...SELECT)\n  tidesdb_mixed_engine        Mixed-engine transactions (TidesDB + InnoDB in same txn)\n  tidesdb_object_store        Object store integration (CRUD, indexes, txns, bulk, compaction)\n  tidesdb_online_ddl          Online DDL (instant, inplace, copy)\n  tidesdb_options             Table and field options\n  tidesdb_partition           RANGE/LIST/HASH/KEY partitioning\n  tidesdb_per_index_btree     Per-index USE_BTREE option\n  tidesdb_pessimistic_forupdate    SELECT FOR UPDATE serialization (pessimistic locking)\n  tidesdb_pessimistic_insert_lock  Pessimistic locking edge cases (non-existing rows, INSERT)\n  tidesdb_pk_index            Primary key and secondary index scans\n  tidesdb_rename              Table rename\n  tidesdb_replace_iodku       REPLACE INTO and INSERT ON DUPLICATE KEY UPDATE\n  tidesdb_savepoint           SQL SAVEPOINT / ROLLBACK TO / RELEASE SAVEPOINT\n  tidesdb_spatial             Spatial indexes (Hilbert curve, MBR predicates)\n  tidesdb_sql                 40 SQL cases (aggregates, JOINs, subqueries, etc.)\n  tidesdb_status_vars         SHOW GLOBAL STATUS LIKE 'tidesdb%' monitoring variables\n  tidesdb_stress              Concurrent transactions, conflicts, truncate cycles\n  tidesdb_tpcc_contention     TPC-C district counter contention (pessimistic locking)\n  tidesdb_ttl                 Time-to-live expiration\n  tidesdb_unified_memtable    Unified memtable mode (shared WAL, cross-CF consistency)\n  tidesdb_vcol                Virtual/generated columns\n  tidesdb_vector              Vector search (MHNSW ANN, INSERT/UPDATE/DELETE)\n  tidesdb_write_pressure          oltp_write_only pressure (multi-connection)\n\nRun with verbose output:\n\n  perl mtr --suite=tidesdb --verbose\n\n\nQUICK TEST\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\n  CREATE TABLE t (id INT PRIMARY KEY, data VARCHAR(100)) ENGINE=TidesDB;\n  INSERT INTO t VALUES (1, 'hello'), (2, 'world');\n  SELECT * FROM t;\n  DROP TABLE t;\n\n\nSANITIZER BUILDS\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nThe TidesDB plugin supports plugin-level UBSAN/ASAN without rebuilding the\nentire MariaDB server:\n\n  cmake .. -DTIDESDB_WITH_UBSAN=ON   # UBSAN only\n  cmake .. -DTIDESDB_WITH_ASAN=ON    # ASAN only\n  cmake .. -DTIDESDB_WITH_ASAN=ON -DTIDESDB_WITH_UBSAN=ON  # both\n  make -j$(nproc) tidesdb\n\n  # Run tests with sanitizer error logging:\n  UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=0 \\\n    perl ./mtr --suite=tidesdb --parallel=4\n\nFor full ASAN coverage (requires full server rebuild):\n\n  cmake .. -DWITH_ASAN=ON -DWITH_UBSAN=ON -DCMAKE_BUILD_TYPE=Debug\n  make -j$(nproc)\n\n\nLICENSE\n░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░\n\nGNU General Public License v2\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftidesdb%2Ftidesql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftidesdb%2Ftidesql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftidesdb%2Ftidesql/lists"}