Answered adoption questions for evaluating BtrQL against existing SQL workflows.
Adoption and First Run
7 questions
Does BtrQL compete with dbt?
Not directly. dbt covers many more SQL dialects and a broader analytics-engineering workflow. BtrQL is focused on improving SQL as a language: reusable typed abstractions, compiler checks, and generated SQL that still fits normal database workflows.
Why did you create BtrQL?
I got frustrated with tiny SQL mistakes that forced phone-screen merge-request reviews on weekends, and with debugging large SQL snippets by copy-pasting them and unwrapping the query like an onion.
What is the vision?
Define types and data-validation rules once, then reuse them across an OLTP backend database, Kafka SQL, and OLAP lakehouse or warehouse work. Moving code to data is a known optimization strategy, but tens of thousands of lines of SQL and stored procedures are hard to read, debug, trace, and review. BtrQL should make that work feel like maintainable source code instead of opaque database text.
How should BtrQL coexist with handwritten SQL, ORMs, query builders, and migration tools?
BtrQL aims to gradually replace weaker SQL abstractions where it helps, but mixed projects allow existing SQL to stay in place while generated SQL flows through current drivers and migration/review tools.
Can BtrQL be introduced incrementally into an existing system?
Yes. BtrQL projects can mix BtrQL and SQL files, so existing SQL can stay in the project while new or repeated query logic moves to BtrQL. Parsed SQL exposes typed objects when supported; otherwise use catalog import from a test database.
Where is the install guide for the compiler, CLI, and VS Code extension?
The easiest recommended first install is the demo VS Code plugin from the Download page. Choose the package matching your operating system and architecture; macOS and Linux packages are self-contained, while Windows packages require .NET 11. You do not need to download a separate compiler ZIP. Use the CLI tooling guide and dialect compiler downloads when you need command-line compilation, CI checks, or non-editor workflows.
What exact command compiles a minimal `.btrql` file to SQL?
Getting Started publishes btrqlcompile-d<dialect>-i<file|directory|->[-t<file|directory>][--format] and a concrete project-compilation command.
Application Integration and Operations
6 questions
Who owns BtrQL source and generated SQL: DBA, app team, platform, or CI?
Whoever owned the SQL before should own the BtrQL source and generated SQL. Platform and CI can enforce gates without becoming semantic owners.
Is BtrQL build-time only, or does production need a BtrQL runtime dependency?
BtrQL is build-time only for compiled artifacts; production runs plain generated SQL with no BtrQL runtime.
What is the compatibility policy for BtrQL source syntax across compiler versions?
Published BtrQL syntax should keep working even when newer or better syntax is added later; different syntaxes can coexist. Generated SQL should still be reviewed during upgrades.
Does verification include query plans and performance?
BtrQL is not an optimizer, but it makes plan and performance review straightforward because the production artifact is plain SQL.
Can BtrQL show, compare, or export database execution plans?
Explain-plan export or comparison is not a current feature. Review plans with the target database's normal explain, monitoring, and tuning tools against generated SQL.
Can BtrQL model ETL procedure chains or scheduled jobs?
No. ETL chains and schedulers are out of scope; use orchestration and scheduling tools such as Airflow, dbt, warehouse tooling, migration tooling, cron, or the platform already responsible for those workflows.
Dialects and Database Boundaries
3 questions
What are the intended non-goals and cases where BtrQL should not be used?
Do not use BtrQL as a universal dialect portability layer, ORM/runtime, migration runner, cost-based optimizer, deployment orchestrator, ETL scheduler, or application binding generator. Use dialect-native SQL or catalog import when BtrQL syntax does not cover a construct.
Can one project compile to multiple dialects in CI without duplicating project files?
BtrQL projects are single-target; multi-dialect CI requires separate project/config orchestration outside BtrQL.
Does BtrQL validate generated SQL against target deployment-user permissions?
No. Deployment-user permission validation is out of scope; validate generated SQL or routines under the relevant target role because DBMS grants, roles, definer/invoker rules, column permissions, and row-level security control access.
Syntax, Projects, and Migration
12 questions
Does BtrQL execute SQL, or only generate SQL for existing database drivers and tools?
BtrQL generates SQL for existing database drivers and tools; development tools may execute that SQL for validation or debugging.
How are query parameters and bind variables represented?
Backend bind variables are owned by applications and database drivers. BtrQL parameters are for functions, table-valued functions, stored procedures, and macros; BtrQL is not a bind-parameter runtime.
How does BtrQL avoid SQL injection and unsafe literal interpolation?
BtrQL reduces unsafe SQL string-building by compiling structured, type-checked source to SQL, but it is not a parameter-binding runtime. User input must still be bound by the application/database driver, and untrusted source generation remains unsafe.
How are generated result columns mapped back into DTOs, records, or service models?
Out of scope. Result mapping remains the application/data-access layer's responsibility, same as with handwritten SQL; Application integration includes non-normative Java, Python, and TypeScript examples.
Does BtrQL generate typed bindings for Java/Kotlin/Go/TypeScript, or only SQL text?
No. Java/Kotlin/Go/TypeScript typed binding generation is out of scope; BtrQL emits SQL and project/editor metadata, not application-language models.
How do transactions work when BtrQL emits DML, DDL, routines, or multiple statements?
BtrQL does not affect isolation levels, transactions, or runtime behavior. Runtime behavior depends on the generated SQL and the tool/session that runs it.
How are JDBC credentials stored, redacted, rotated, or replaced with enterprise auth?
BtrQL may need a DB connection for debug, catalog import, or schema comparison. Use a test/staging/read-only database where possible and manage credentials through normal secret-management and CI controls.
How are module names mapped to generated database object names and output paths?
Module-to-file and output-path mapping should be predictable so generated SQL can be reviewed and deployed consistently.
Are imported views deployed as separate SQL objects, and can they be inlined?
Imported views stay named, not inlined.
Can modules be packaged, versioned, and shared across repositories?
Not yet. BtrQL does not currently provide package management for shared modules; teams share modules as source unless a package workflow is added.
Are `val` bindings strictly compile-time constants, or can they reference runtime config?
val is compile-time only.
Why are persona role pages redirects instead of actual adoption guidance?
DBAs, data engineers, backend engineers, and technical leaders should each have a direct adoption path explaining first workflow, evaluation evidence, and handoff to existing SQL review/deployment processes.
License, Privacy, and Enterprise
10 questions
Why isn't BtrQL open source?
With the volume of code LLMs can now produce, source contributions would be hard to review responsibly. I would rather read feature requests in English, implement changes deliberately, and make sure they are properly tested. Recent attempts to "liberate" open source projects from their creators' influence also make publishing sources unattractive at the moment.
Why is BtrQL free?
The foundation is free because I want people to try BtrQL without procurement friction. I plan to add paid features later on top of that free base.
Does BtrQL support row locks, isolation levels, `FOR UPDATE`, `NOLOCK`, `SKIP LOCKED`, or vendor-specific concurrency features?
Not yet. Locking/concurrency clauses are unsupported in BtrQL syntax; use mixed SQL or catalog-imported database objects when needed. Runtime lock behavior belongs to the database session, transaction, and isolation settings.
Can generated SQL include trace comments, query names, deployment metadata, checksums, or audit headers?
Not yet. Generated SQL metadata/audit headers are unsupported; deployment tooling should add trace or audit metadata outside BtrQL. Future BtrQL support should be opt-in, deterministic, and default off.
Which DBMSs and exact versions are officially supported?
BtrQL should publish supported DBMS targets by version, coverage, and evidence level; PostgreSQL is the main focus.
Can one project restrict itself to one target dialect?
Projects support one target dialect; multi-dialect projects are not supported.
How are synonyms, database links, linked servers, or cross-database names represented?
Not supported. Remote objects only work when the database exposes them as ordinary importable relation or callable metadata; native synonyms, database links, linked servers, pass-through SQL, and cross-database names need a separate design.
Does BtrQL rewrite unsupported constructs such as `QUALIFY`, or reject them?
Unsupported constructs are rejected rather than silently rewritten.
Is there a completed DPA, privacy position, and data classification guidance?
For the local demo compiler, processing stays on the user's device or infrastructure and the compiler does not collect telemetry, usage data, schema data, database data, or error reports. Hosted/team evaluation needs separate privacy, DPA, and data-classification terms.
Is there an SBOM, vulnerability policy, dependency update process, and signed artifact story?
Public supply-chain materials are not ready yet. Buyers should expect an SBOM, signed downloads or checksums, vulnerability reporting, dependency/update policy, and support window before production procurement.