Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
53 lines
1009 B
Go
53 lines
1009 B
Go
package catalog
|
|
|
|
import (
|
|
"github.com/sqlc-dev/sqlc/internal/sql/ast"
|
|
"github.com/sqlc-dev/sqlc/internal/sql/sqlerr"
|
|
)
|
|
|
|
func (c *Catalog) createView(stmt *ast.ViewStmt, colGen columnGenerator) error {
|
|
cols, err := colGen.OutputColumns(stmt.Query)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
catName := ""
|
|
if stmt.View.Catalogname != nil {
|
|
catName = *stmt.View.Catalogname
|
|
}
|
|
schemaName := ""
|
|
if stmt.View.Schemaname != nil {
|
|
schemaName = *stmt.View.Schemaname
|
|
}
|
|
|
|
tbl := Table{
|
|
Rel: &ast.TableName{
|
|
Catalog: catName,
|
|
Schema: schemaName,
|
|
Name: *stmt.View.Relname,
|
|
},
|
|
Columns: cols,
|
|
}
|
|
|
|
ns := tbl.Rel.Schema
|
|
if ns == "" {
|
|
ns = c.DefaultSchema
|
|
}
|
|
schema, err := c.getSchema(ns)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, existingIdx, err := schema.getTable(tbl.Rel)
|
|
if err == nil && !stmt.Replace {
|
|
return sqlerr.RelationExists(tbl.Rel.Name)
|
|
}
|
|
|
|
if stmt.Replace && err == nil {
|
|
schema.Tables[existingIdx] = &tbl
|
|
} else {
|
|
schema.Tables = append(schema.Tables, &tbl)
|
|
}
|
|
|
|
return nil
|
|
}
|