Repository-level orientation for coding agents working in support-query-builder.
- Type: Kotlin library repository with Android integration module and sample app.
- Primary goal: fluent, type-safe SQL query building with Room raw-query compatibility.
- Default branch:
develop.
:annotations(JVM-only): defines annotation API, currently@EntitySchema.:core(JVM-only): query builder contracts, SQL clause types, and DSL entrypoints.:core:ext(Android library): translates builder output intoSupportSQLiteQuery.:processor(JVM-only): KSP processor that reads Room metadata and emits schema objects via KotlinPoet.:sample(Android app, local development): demonstrates end-to-end usage; excluded from CI.
Dependency direction:
:annotationshas no project dependencies.:corehas no project dependencies.:core:extdepends on:core.:processordepends on:annotations.:sampledepends on all library modules.
co.anitrend.support.query.builder.annotation
co.anitrend.support.query.builder.coreco.anitrend.support.query.builder.core.contractco.anitrend.support.query.builder.core.contract.queryco.anitrend.support.query.builder.core.criteriaco.anitrend.support.query.builder.core.criteria.extensionsco.anitrend.support.query.builder.core.fromco.anitrend.support.query.builder.core.from.extentionsco.anitrend.support.query.builder.core.orderco.anitrend.support.query.builder.core.order.extensionsco.anitrend.support.query.builder.core.projectionco.anitrend.support.query.builder.core.projection.extensionsco.anitrend.support.query.builder.dsl
co.anitrend.support.query.builder.core.ext
co.anitrend.support.query.builder.processorco.anitrend.support.query.builder.processor.extensionsco.anitrend.support.query.builder.processor.factoryco.anitrend.support.query.builder.processor.loggerco.anitrend.support.query.builder.processor.logger.contractco.anitrend.support.query.builder.processor.modelco.anitrend.support.query.builder.processor.model.columnco.anitrend.support.query.builder.processor.model.coreco.anitrend.support.query.builder.processor.model.embedco.anitrend.support.query.builder.processor.model.fieldco.anitrend.support.query.builder.processor.model.table
-
SQL builder implementation:
core/src/main/kotlin/co/anitrend/support/query/builder/core/QueryBuilder.ktcore/src/main/kotlin/co/anitrend/support/query/builder/core/contract/AbstractQueryBuilder.ktcore/src/main/kotlin/co/anitrend/support/query/builder/core/contract/query/IQueryBuilder.ktcore/src/main/kotlin/co/anitrend/support/query/builder/dsl/QueryBuilderDsl.kt
-
Android Room raw-query bridge:
core/ext/src/main/kotlin/co/anitrend/support/query/builder/core/ext/QueryBuilderExtension.kt
-
Annotation and processing pipeline:
annotations/src/main/kotlin/co/anitrend/support/query/builder/annotation/EntitySchema.ktprocessor/src/main/kotlin/co/anitrend/support/query/builder/processor/Provider.ktprocessor/src/main/kotlin/co/anitrend/support/query/builder/processor/Processor.ktprocessor/src/main/kotlin/co/anitrend/support/query/builder/processor/extensions/CodeAnalyserExtension.ktprocessor/src/main/kotlin/co/anitrend/support/query/builder/processor/model/Candidate.ktprocessor/src/main/kotlin/co/anitrend/support/query/builder/processor/factory/ClassFactory.kt
- Build SQL string and bind parameters in
QueryBuilder. - Convert query to
SupportSQLiteQuerywithasSupportSQLiteQuery()in:core:ext. - Pass query to Room DAO
@RawQuerymethod in consuming app or sample.
When expanding SQL features or adding new SQLite functions, validate against Android runtime SQLite capabilities instead of desktop SQLite assumptions.
- Treat SQLite feature support as runtime-dependent on Android devices and API levels.
- Verify capability-sensitive SQL on representative API levels (at least minSdk and latest).
- Use runtime checks when needed:
SELECT sqlite_version();PRAGMA compile_options;
- Prefer conservative SQL for shared paths used by
:coreand consumed through Room raw queries. - Document any minimum-runtime expectations when introducing advanced SQL functions.
This repository should align with Android SQLite behavior first, then broader upstream SQLite documentation.
- Entity class is marked with
@EntitySchema. ProvidercreatesProcessor, which scans annotations using the KSPSymbolProcessorAPI.- Candidate extraction reads Room
@Entity,@ColumnInfo,@Embeddedmetadata. - KotlinPoet writes
<EntityName>Schemaobject constants. - Output is written through the KSP
CodeGeneratorusing KotlinPoet.
- Current processor implementation is KSP-first (
SymbolProcessorProvider,SymbolProcessor,CodeGenerator). - Consumer wiring uses the KSP Gradle plugin and
ksp(project(":processor"))in the sample module. - KotlinPoet is the code-generation backbone for emitted schema objects.
- SQLite docs index: https://sqlite.org/docs.html
- Android SQLite package summary: https://developer.android.com/reference/android/database/sqlite/package-summary
- KSP overview: https://kotlinlang.org/docs/ksp-overview.html
- KSP migration guide: https://developer.android.com/build/migrate-to-ksp
- KotlinPoet docs: https://square.github.io/kotlinpoet/
- Module placement and package ownership:
.github/skills/support-query-builder-reference-map/SKILL.md - Build and dependency wiring:
.github/skills/support-query-builder-build-dependencies/SKILL.md - KDoc and Dokka expectations:
.github/skills/support-query-builder-kdoc-dokka/SKILL.md - SQLite, Android, and processor flow map:
.github/skills/support-query-builder-sqlite-android-map/SKILL.md
- Read this file first.
- Open
settings.gradle.ktsfor module graph confirmation. - If task is SQLite or raw query related, use the SQLite map skill.
- If task changes build wiring, use build dependencies skill.
- If task changes public API docs, use kdoc-dokka skill.
IMPORTANT: This project has a knowledge graph. ALWAYS use the code-review-graph MCP tools BEFORE using Grep/Glob/Read to explore the codebase. The graph is faster, cheaper (fewer tokens), and gives you structural context (callers, dependents, test coverage) that file scanning cannot.
- Exploring code:
semantic_search_nodesorquery_graphinstead of Grep - Understanding impact:
get_impact_radiusinstead of manually tracing imports - Code review:
detect_changes+get_review_contextinstead of reading entire files - Finding relationships:
query_graphwith callers_of/callees_of/imports_of/tests_for - Architecture questions:
get_architecture_overview+list_communities
Fall back to Grep/Glob/Read only when the graph doesn't cover what you need.
| Tool | Use when |
|---|---|
detect_changes |
Reviewing code changes — gives risk-scored analysis |
get_review_context |
Need source snippets for review — token-efficient |
get_impact_radius |
Understanding blast radius of a change |
get_affected_flows |
Finding which execution paths are impacted |
query_graph |
Tracing callers, callees, imports, tests, dependencies |
semantic_search_nodes |
Finding functions/classes by name or keyword |
get_architecture_overview |
Understanding high-level codebase structure |
refactor_tool |
Planning renames, finding dead code |
- The graph auto-updates on file changes (via hooks).
- Use
detect_changesfor code review. - Use
get_affected_flowsto understand impact. - Use
query_graphpattern="tests_for" to check coverage.