sqlc

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

SQLC Skill

SQLC 技能指南

This skill provides instructions for working with
sqlc
and database queries in the NCPS repository. NCPS supports multiple database engines (SQLite, PostgreSQL, MySQL), and
sqlc
is used to generate type-safe Go code from SQL queries for each engine.
本技能文档提供了在NCPS代码库中使用
sqlc
和进行数据库查询的相关说明。NCPS支持多种数据库引擎(SQLite、PostgreSQL、MySQL),
sqlc
用于为每个引擎从SQL查询生成类型安全的Go代码。

Configuration

配置

  • SQLC Config:
    sqlc.yml
  • Queries:
    • SQLite:
      db/query.sqlite.sql
    • PostgreSQL:
      db/query.postgres.sql
    • MySQL:
      db/query.mysql.sql
  • Output:
    • SQLite:
      pkg/database/sqlitedb
    • PostgreSQL:
      pkg/database/postgresdb
    • MySQL:
      pkg/database/mysqldb
  • SQLC配置文件
    sqlc.yml
  • 查询文件:
    • SQLite:
      db/query.sqlite.sql
    • PostgreSQL:
      db/query.postgres.sql
    • MySQL:
      db/query.mysql.sql
  • 输出目录:
    • SQLite:
      pkg/database/sqlitedb
    • PostgreSQL:
      pkg/database/postgresdb
    • MySQL:
      pkg/database/mysqldb

Workflow for Query Changes

查询变更工作流程

Any time a query file (
db/query.<engine>.sql
) is updated, you MUST follow these steps:
每当更新查询文件(
db/query.<engine>.sql
)时,你必须遵循以下步骤:

1. Generate SQLC Code

1. 生成SQLC代码

Run the
sqlc generate
command to update the generated Go files for all engines.
bash
sqlc generate
运行
sqlc generate
命令来更新所有引擎对应的生成Go文件。
bash
sqlc generate

2. Regenerate Database Wrappers and Models

2. 重新生成数据库包装器和模型

Run
go generate
for the
pkg/database
package. This command uses
gen-db-wrappers
to automatically:
  1. Extract the
    Querier
    interface from the
    postgresdb
    backend.
  2. Generate the common
    Querier
    interface in
    pkg/database/querier.go
    .
  3. Generate common domain models in
    pkg/database/models.go
    .
  4. Generate database wrappers (
    wrapper_sqlite.go
    ,
    wrapper_postgres.go
    ,
    wrapper_mysql.go
    ).
bash
go generate ./pkg/database
[!IMPORTANT] Do NOT manually edit
pkg/database/querier.go
or
pkg/database/models.go
. They are fully automated.
pkg/database
包运行
go generate
命令。该命令会使用
gen-db-wrappers
自动完成以下操作:
  1. postgresdb
    后端提取
    Querier
    接口。
  2. pkg/database/querier.go
    中生成通用的
    Querier
    接口。
  3. pkg/database/models.go
    中生成通用领域模型。
  4. 生成数据库包装器(
    wrapper_sqlite.go
    wrapper_postgres.go
    wrapper_mysql.go
    )。
bash
go generate ./pkg/database
[!IMPORTANT] 请勿手动编辑
pkg/database/querier.go
pkg/database/models.go
文件,它们是完全自动化生成的。

Best Practices

最佳实践

  • Consistency: Ensure that equivalent queries exist for all supported engines unless the feature is engine-specific.
  • Linting: Use
    sqlfluff
    to lint and format SQL files before running
    sqlc generate
    .
    bash
    sqlfluff lint db/query.*.sql
    sqlfluff format db/query.*.sql
  • 一致性:除非功能是特定引擎专属的,否则要确保所有支持的引擎都有对应的等效查询。
  • 代码检查:在运行
    sqlc generate
    之前,使用
    sqlfluff
    对SQL文件进行检查和格式化。
    bash
    sqlfluff lint db/query.*.sql
    sqlfluff format db/query.*.sql