| # SQLite Upgrade Guide |
| |
| ## Overview |
| |
| Perfetto depends on SQLite internals: |
| - Modified SQLite tokenizer (`tokenize.c`) for PerfettoSQL |
| - SQLite grammar file (`parse.y`) processing |
| - Internal SQLite constants and structures |
| |
| ## Upgrade Procedure |
| |
| ### Prerequisites |
| Only upgrade when Chrome, Android, and Google3 all support the target SQLite version. |
| |
| ### Steps |
| |
| 1. **Update version references:** |
| - `tools/install-build-deps` - update SQLite version/hash |
| - `bazel/deps.bzl` - update SQLite version/hash |
| |
| 2. **Run parser update:** |
| ```bash |
| python3 tools/update_sql_parsers.py |
| ``` |
| |
| 3. **Build and test:** |
| ```bash |
| tools/ninja -C out/linux_clang_release trace_processor_shell perfetto_unittests |
| out/linux_clang_release/perfetto_unittests --gtest_filter="*Sql*" |
| tools/diff_test_trace_processor.py out/linux_clang_release/trace_processor_shell --quiet |
| ``` |
| |
| ## Common Issues |
| |
| ### SQLite Special Tokens Changed |
| **Error:** `SQLite special tokens have changed! Expected: %token SPACE COMMENT ILLEGAL.` |
| |
| **Fix:** Update `EXPECTED_SPECIAL_TOKENS` in `tools/update_sql_parsers.py` |
| |
| ### Missing Token Definitions |
| **Error:** `use of undeclared identifier 'TK_COMMENT'` or `'SQLITE_DIGIT_SEPARATOR'` |
| |
| **Fix:** Add missing constants to `tokenize_internal_helper.h` |
| |
| ### SQLite Internal API Changes |
| **Error:** Compilation errors in `sqlite_utils.h` or `sqlite/bindings/*.h` |
| |
| **Fix:** Update bindings for SQLite API changes |
| |
| ## Key Files |
| |
| ### Always Review |
| - `tools/install-build-deps` - SQLite version/hash |
| - `bazel/deps.bzl` - SQLite version/hash |
| - `tools/update_sql_parsers.py` - Parser update script |
| - `tokenize_internal_helper.h` - Tokenizer integration |
| |
| ### Generated (Don't Edit) |
| - `perfettosql_grammar.*` |
| - `perfettosql_keywordhash.h` |
| - `tokenize_internal.c` |
| |
| ## Rollback |
| 1. Revert version changes in `tools/install-build-deps` and `bazel/deps.bzl` |
| 2. Re-run `python3 tools/update_sql_parsers.py` |
| 3. Rebuild |