Skip to content

Commit c84a17f

Browse files
committed
First pass at finished shim
1 parent 3825d3a commit c84a17f

3 files changed

Lines changed: 204 additions & 111 deletions

File tree

internal/cmd/shim.go

Lines changed: 98 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,118 @@ import (
77
"github.com/kyleconroy/sqlc/internal/sql/catalog"
88
)
99

10-
func pluginSettings(settings config.CombinedSettings) *plugin.Settings {
11-
return nil
10+
func pluginSettings(cs config.CombinedSettings) *plugin.Settings {
11+
var over []*plugin.Override
12+
for _, o := range cs.Overrides {
13+
over = append(over, &plugin.Override{
14+
CodeType: "", // FIXME
15+
DbType: o.DBType,
16+
Nullable: o.Nullable,
17+
Column: o.Column,
18+
})
19+
}
20+
return &plugin.Settings{
21+
Version: cs.Global.Version,
22+
Engine: string(cs.Package.Engine),
23+
Schema: []string(cs.Package.Schema),
24+
Queries: []string(cs.Package.Queries),
25+
Overrides: over,
26+
Rename: cs.Rename,
27+
}
1228
}
1329

1430
func pluginCatalog(c *catalog.Catalog) *plugin.Catalog {
15-
return nil
31+
var schemas []*plugin.Schema
32+
for _, s := range c.Schemas {
33+
var enums []*plugin.Enum
34+
for _, typ := range s.Types {
35+
enum, ok := typ.(*catalog.Enum)
36+
if !ok {
37+
continue
38+
}
39+
enums = append(enums, &plugin.Enum{
40+
Name: enum.Name,
41+
Comment: enum.Comment,
42+
Vals: enum.Vals,
43+
})
44+
}
45+
var tables []*plugin.Table
46+
for _, t := range s.Tables {
47+
var columns []*plugin.Column
48+
for _, c := range t.Columns {
49+
l := -1
50+
if c.Length != nil {
51+
l = *c.Length
52+
}
53+
columns = append(columns, &plugin.Column{
54+
Name: c.Name,
55+
Comment: c.Comment,
56+
NotNull: c.IsNotNull,
57+
IsArray: c.IsArray,
58+
Length: int32(l),
59+
})
60+
}
61+
tables = append(tables, &plugin.Table{
62+
Rel: &plugin.Identifier{
63+
Catalog: t.Rel.Catalog,
64+
Schema: t.Rel.Schema,
65+
Name: t.Rel.Name,
66+
},
67+
Columns: columns,
68+
Comment: t.Comment,
69+
})
70+
}
71+
schemas = append(schemas, &plugin.Schema{
72+
Comment: s.Comment,
73+
Name: s.Name,
74+
Tables: tables,
75+
Enums: enums,
76+
})
77+
}
78+
return &plugin.Catalog{
79+
Name: c.Name,
80+
DefaultSchema: c.DefaultSchema,
81+
Comment: c.Comment,
82+
Schemas: schemas,
83+
}
1684
}
1785

1886
func pluginQueries(r *compiler.Result) []*plugin.Query {
1987
var out []*plugin.Query
2088
for _, q := range r.Queries {
89+
var params []*plugin.Parameter
90+
var columns []*plugin.Column
91+
for _, c := range q.Columns {
92+
columns = append(columns, pluginQueryColumn(c))
93+
}
94+
for _, p := range q.Params {
95+
params = append(params, pluginQueryParam(p))
96+
}
2197
out = append(out, &plugin.Query{
22-
Text: q.SQL,
98+
Name: q.Name,
99+
Cmd: q.Cmd,
100+
Text: q.SQL,
101+
Comments: q.Comments,
102+
Columns: columns,
103+
Params: params,
23104
})
24105
}
25106
return out
26107
}
27108

109+
func pluginQueryColumn(c *compiler.Column) *plugin.Column {
110+
return &plugin.Column{
111+
Name: c.Name,
112+
}
113+
}
114+
115+
func pluginQueryParam(p compiler.Parameter) *plugin.Parameter {
116+
return &plugin.Parameter{
117+
Number: int32(p.Number),
118+
Column: pluginQueryColumn(p.Column),
119+
}
120+
}
121+
28122
func codeGenRequest(r *compiler.Result, settings config.CombinedSettings) *plugin.CodeGenRequest {
29123
return &plugin.CodeGenRequest{
30124
Settings: pluginSettings(settings),

0 commit comments

Comments
 (0)