Skip to content

Commit e93a73f

Browse files
committed
README + internal refactoring
1 parent 4576bb3 commit e93a73f

5 files changed

Lines changed: 124 additions & 25 deletions

File tree

README.md

Lines changed: 116 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,119 @@
11
# sqlc-ydb
22

3-
`cmd/sqlc-engine-ydb` is an external engine of SQLC with support YDB.
4-
`cmd/sqlc-gen-ydb-go-sdk` and `cmd/sqlc-gen-ydb-database-sql` are codegen plugins for YDB (ydb-go-sdk and database/sql APIs).
3+
[sqlc](https://sqlc.dev) engine and codegen plugins for [YDB](https://ydb.tech).
4+
5+
- **sqlc-engine-ydb** — engine plugin: parses YDB schema and queries.
6+
- **sqlc-gen-ydb-go-sdk** — generates Go code for [ydb-go-sdk](https://github.com/ydb-platform/ydb-go-sdk) (query API, `ParamsBuilder`, `QueryRow`, `Exec`).
7+
- **sqlc-gen-ydb-database-sql** — generates Go code for `database/sql` with YDB driver (DBTX, `ExecContext`, `QueryContext`, `QueryRowContext`).
8+
- **sqlc-gen-ydb-python-sdk** — generates Python code for [ydb-python-sdk](https://github.com/ydb-platform/ydb-python-sdk) (`QuerySessionPool`, `execute_with_retries`, `$name` parameters).
9+
10+
## Configuration (sqlc.yaml)
11+
12+
Use **version 2** config. Register the engine and the codegen plugins you need; each `codegen` entry produces output in its `out` directory.
13+
14+
### Minimal: one plugin (e.g. ydb-go-sdk)
15+
16+
```yaml
17+
version: "2"
18+
19+
engines:
20+
- name: ydb
21+
process:
22+
cmd: sqlc-engine-ydb
23+
24+
plugins:
25+
- name: ydb-go-sdk
26+
process:
27+
cmd: sqlc-gen-ydb-go-sdk
28+
29+
sql:
30+
- engine: ydb
31+
schema: "schema.sql"
32+
queries: "queries.sql"
33+
codegen:
34+
- out: ydb-go-sdk
35+
plugin: ydb-go-sdk
36+
options:
37+
package: db
38+
# optional, default: github.com/ydb-platform/ydb-go-sdk/v3
39+
sql_package: github.com/ydb-platform/ydb-go-sdk/v3
40+
```
41+
42+
### database/sql (ydb-database-sql)
43+
44+
```yaml
45+
plugins:
46+
- name: ydb-database-sql
47+
process:
48+
cmd: sqlc-gen-ydb-database-sql
49+
50+
# In sql.codegen add:
51+
- out: ydb-database-sql
52+
plugin: ydb-database-sql
53+
options:
54+
package: db
55+
```
56+
57+
Output: `ydb-database-sql/models.go`, `db.go`, `queries.sql.go` (Go types, DBTX, retry-wrapped queries).
58+
59+
### ydb-python-sdk
60+
61+
```yaml
62+
plugins:
63+
- name: ydb-python-sdk
64+
process:
65+
cmd: sqlc-gen-ydb-python-sdk
66+
67+
# In sql.codegen add:
68+
- out: ydb-python-sdk
69+
plugin: ydb-python-sdk
70+
options:
71+
package: db
72+
```
73+
74+
Output: `ydb-python-sdk/models.py`, `queries.py` (or one `.py` per query file), `__init__.py`. Use `Querier(pool)` and call methods like `get_author(id=...)`; add the output dir to `PYTHONPATH` or use as package `db`.
75+
76+
### All plugins in one project
77+
78+
```yaml
79+
version: "2"
80+
81+
engines:
82+
- name: ydb
83+
process:
84+
cmd: sqlc-engine-ydb
85+
86+
plugins:
87+
- name: ydb-go-sdk
88+
process:
89+
cmd: sqlc-gen-ydb-go-sdk
90+
- name: ydb-database-sql
91+
process:
92+
cmd: sqlc-gen-ydb-database-sql
93+
- name: ydb-python-sdk
94+
process:
95+
cmd: sqlc-gen-ydb-python-sdk
96+
97+
sql:
98+
- engine: ydb
99+
schema: "schema.sql"
100+
queries: "queries.sql"
101+
codegen:
102+
- out: ydb-go-sdk
103+
plugin: ydb-go-sdk
104+
options:
105+
package: db
106+
- out: ydb-database-sql
107+
plugin: ydb-database-sql
108+
options:
109+
package: db
110+
- out: ydb-python-sdk
111+
plugin: ydb-python-sdk
112+
options:
113+
package: db
114+
```
115+
116+
Ensure the plugin binaries (`sqlc-engine-ydb`, `sqlc-gen-ydb-go-sdk`, etc.) are on `PATH` when you run `sqlc generate`.
5117

6118
## Generating code with Docker (recommended)
7119

@@ -12,7 +124,7 @@ You don't need to install sqlc or plugins locally. Use the pre-built image (or b
12124
docker run --rm -v "$(pwd):/src" -w /src ghcr.io/<owner>/sqlc-ydb:latest generate
13125
```
14126

15-
Replace `<owner>` with the GitHub org/user that publishes the image (e.g. `sqlc-dev`). The image includes sqlc (from engine-plugin), **sqlc-engine-ydb**, **sqlc-gen-ydb-go-sdk**, and **sqlc-gen-ydb-database-sql**.
127+
Replace `<owner>` with the GitHub org/user that publishes the image (e.g. `sqlc-dev`). The image includes sqlc (from engine-plugin), **sqlc-engine-ydb**, **sqlc-gen-ydb-go-sdk**, **sqlc-gen-ydb-database-sql**, and **sqlc-gen-ydb-python-sdk**.
16128

17129
To build the image locally (from the sqlc-ydb repo root):
18130

@@ -44,4 +156,4 @@ The `examples/authors` project uses the v2 config with the **sqlc-engine-ydb** e
44156
make examples
45157
```
46158

47-
Generated files appear under each example in `examples/<name>/ydb-go-sdk/` and `examples/<name>/ydb-database-sql/` (`models.go`, `db.go`, `queries.sql.go`). The Makefile uses `bin/sqlc` from `make build-sqlc` by default; override with `make examples SQLC=/path/to/sqlc`.
159+
Generated files appear under each example: `ydb-go-sdk/` and `ydb-database-sql/` (Go: `models.go`, `db.go`, `queries.sql.go`), `ydb-python-sdk/` (Python: `models.py`, `queries.py`, `__init__.py`). The Makefile uses `bin/sqlc` from `make build-sqlc` by default; override with `make examples SQLC=/path/to/sqlc`.

internal/codegen/generate.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ import (
1010
func Generate(ctx context.Context, req *pb.GenerateRequest, dest Destination) (*pb.GenerateResponse, error) {
1111
switch dest {
1212
case DatabaseSQL:
13-
return generateDbsql(ctx, req)
13+
return generateDatabaseSQL(ctx, req)
1414
case YdbGoSDK:
15-
return generateYdbGoSdk(ctx, req)
15+
return generateYdbGoSDK(ctx, req)
1616
case YdbPythonSDK:
17-
return generatePysdk(ctx, req)
17+
return generateYdbPythonSDK(ctx, req)
1818
default:
19-
return generateYdbGoSdk(ctx, req) // fallback
19+
return generateYdbGoSDK(ctx, req) // fallback
2020
}
2121
}

internal/codegen/generate_database_sql.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/sqlc-dev/sqlc-engine-ydb/internal/codegen/pb"
1010
)
1111

12-
func generateDbsql(ctx context.Context, req *pb.GenerateRequest) (*pb.GenerateResponse, error) {
12+
func generateDatabaseSQL(ctx context.Context, req *pb.GenerateRequest) (*pb.GenerateResponse, error) {
1313
opts, err := parseOptions(req.GetPluginOptions())
1414
if err != nil {
1515
return nil, err

internal/codegen/generate_ydb_go_sdk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/sqlc-dev/sqlc-engine-ydb/internal/codegen/pb"
1010
)
1111

12-
func generateYdbGoSdk(ctx context.Context, req *pb.GenerateRequest) (*pb.GenerateResponse, error) {
12+
func generateYdbGoSDK(ctx context.Context, req *pb.GenerateRequest) (*pb.GenerateResponse, error) {
1313
opts, err := parseOptions(req.GetPluginOptions())
1414
if err != nil {
1515
return nil, err

internal/codegen/generate_ydb_python_sdk.go

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/sqlc-dev/sqlc-engine-ydb/internal/codegen/pb"
99
)
1010

11-
func generatePysdk(ctx context.Context, req *pb.GenerateRequest) (*pb.GenerateResponse, error) {
11+
func generateYdbPythonSDK(ctx context.Context, req *pb.GenerateRequest) (*pb.GenerateResponse, error) {
1212
opts, err := parseOptions(req.GetPluginOptions())
1313
if err != nil {
1414
return nil, err
@@ -166,20 +166,7 @@ func pysdkGenQuery(cat *pb.Catalog, pkg string, q *pb.Query) ([]byte, error) {
166166
name := q.GetName()
167167
text := q.GetText()
168168
constName := pysdkToConstName(name)
169-
buf.WriteString(constName + " = \"\"\"\n" + text + "\"\"\"\n\n")
170-
171-
if len(q.GetParams()) > 0 {
172-
buf.WriteString("# params: ")
173-
for i, p := range q.GetParams() {
174-
if col := p.GetColumn(); col != nil {
175-
if i > 0 {
176-
buf.WriteString(", ")
177-
}
178-
buf.WriteString("$" + col.GetName())
179-
}
180-
}
181-
buf.WriteString("\n\n")
182-
}
169+
buf.WriteString(constName + " = \"\"\"\n" + text + "\n\"\"\"\n\n")
183170
return buf.Bytes(), nil
184171
}
185172

0 commit comments

Comments
 (0)