Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions dialect/psql/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ type (
ormDeleteQuery[T any, Tslice ~[]T] = orm.Query[*dialect.DeleteQuery, T, Tslice, bob.SliceTransformer[T, Tslice]]
)

func NewTable[T any, Tset setter[T], C bob.Expression](schema, tableName string, columns C) *Table[T, []T, Tset, C] {
return NewTablex[T, []T, Tset](schema, tableName, columns)
func NewTable[T any, Tset setter[T], C bob.Expression](schema, tableName string, columnNames, columns C) *Table[T, []T, Tset, C] {
return NewTablex[T, []T, Tset](schema, tableName, columnNames, columns)
}

func NewTablex[T any, Tslice ~[]T, Tset setter[T], C bob.Expression](schema, table string, columns C) *Table[T, Tslice, Tset, C] {
func NewTablex[T any, Tslice ~[]T, Tset setter[T], C bob.Expression](schema, table string, columnNames, columns C) *Table[T, Tslice, Tset, C] {
setMapping := mappings.GetMappings(reflect.TypeOf((*new(Tset))))
view, mappings := newView[T, Tslice](schema, table, columns)
view, mappings := newView[T, Tslice](schema, table, columnNames, columns)
t := &Table[T, Tslice, Tset, C]{
View: view,
pkCols: expr.NewColumnsExpr(mappings.PKs...).WithParent(view.alias),
Expand Down
2 changes: 1 addition & 1 deletion dialect/psql/table_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ func (s UserSetter) Expressions(prefix ...string) []bob.Expression {
return exprs
}

var userTable = NewTable[*User, *UserSetter, bob.Expression]("", "users", expr.ColsForStruct[User]("users"))
var userTable = NewTable[*User, *UserSetter, bob.Expression]("", "users", expr.ColsForStruct[User](""), expr.ColsForStruct[User]("users"))

func TestUpdate(t *testing.T) {
ctx := t.Context()
Expand Down
26 changes: 14 additions & 12 deletions dialect/psql/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,30 @@ func UseSchema(ctx context.Context, schema string) context.Context {
return context.WithValue(ctx, orm.CtxUseSchema, schema)
}

func NewView[T any, C bob.Expression](schema, tableName string, columns C) *View[T, []T, C] {
return NewViewx[T, []T](schema, tableName, columns)
func NewView[T any, C bob.Expression](schema, tableName string, columnNames, columns C) *View[T, []T, C] {
return NewViewx[T, []T](schema, tableName, columnNames, columns)
}

func NewViewx[T any, Tslice ~[]T, C bob.Expression](schema, tableName string, columns C) *View[T, Tslice, C] {
v, _ := newView[T, Tslice](schema, tableName, columns)
func NewViewx[T any, Tslice ~[]T, C bob.Expression](schema, tableName string, columnNames, columns C) *View[T, Tslice, C] {
v, _ := newView[T, Tslice](schema, tableName, columnNames, columns)
return v
}

func newView[T any, Tslice ~[]T, C bob.Expression](schema, tableName string, columns C) (*View[T, Tslice, C], mappings.Mapping) {
func newView[T any, Tslice ~[]T, C bob.Expression](schema, tableName string, columnNames, columns C) (*View[T, Tslice, C], mappings.Mapping) {
mappings := mappings.GetMappings(reflect.TypeOf(*new(T)))
alias := tableName
if schema != "" {
alias = fmt.Sprintf("%s.%s", schema, tableName)
}

return &View[T, Tslice, C]{
schema: schema,
name: tableName,
alias: alias,
allCols: expr.NewColumnsExpr(mappings.All...).WithParent(alias),
scanner: scan.StructMapper[T](),
Columns: columns,
schema: schema,
name: tableName,
alias: alias,
allCols: expr.NewColumnsExpr(mappings.All...).WithParent(alias),
scanner: scan.StructMapper[T](),
ColumnNames: columnNames,
Columns: columns,
}, mappings
}

Expand All @@ -54,7 +55,8 @@ type View[T any, Tslice ~[]T, C bob.Expression] struct {
allCols expr.ColumnsExpr
scanner scan.Mapper[T]

Columns C
ColumnNames C
Columns C

AfterSelectHooks bob.Hooks[Tslice, bob.SkipModelHooksKey]
SelectQueryHooks bob.Hooks[*dialect.SelectQuery, bob.SkipQueryHooksKey]
Expand Down
11 changes: 10 additions & 1 deletion dialect/psql/view_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type someStruct struct {
Email string `db:"email"`
}

var someStructView = NewView[*someStruct, bob.Expression]("public", "some_struct", expr.ColsForStruct[someStruct]("some_struct"))
var someStructView = NewView[*someStruct, bob.Expression]("public", "some_struct", expr.ColsForStruct[someStruct](""), expr.ColsForStruct[someStruct]("some_struct"))

func TestSomeViewName(t *testing.T) {
name := someStructView.Name().String()
Expand Down Expand Up @@ -46,6 +46,15 @@ func TestSomeViewColumns(t *testing.T) {
}
}

func TestSomeViewColumnNames(t *testing.T) {
c := someStructView.ColumnNames
query := selectToString(t, Select(sm.Columns(c)), 0)
expected := "SELECT \n\"id\" AS \"id\", \"name\" AS \"name\", \"email\" AS \"email\"\n"
if query != expected {
t.Errorf("Expected '%#v' but got '%#v'", expected, query)
}
}

func TestSomeViewQuery(t *testing.T) {
q := someStructView.Query(sm.Where(Quote("id").In(Arg(1, 2, 3))))
query := viewToString(t, q)
Expand Down
4 changes: 2 additions & 2 deletions gen/templates/models/table/001_types.go.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ type {{$tAlias.UpSingular}}Slice []*{{$tAlias.UpSingular}}
{{$tAlias := .Aliases.Table $table.Key -}}
{{if not $table.Constraints.Primary -}}
// {{$tAlias.UpPlural}} contains methods to work with the {{$table.Name}} view
var {{$tAlias.UpPlural}} = {{$.Dialect}}.NewViewx[*{{$tAlias.UpSingular}}, {{$tAlias.UpSingular}}Slice]("{{$table.Schema}}","{{$table.Name}}",build{{$tAlias.UpSingular}}Columns({{quote $table.Key}}))
var {{$tAlias.UpPlural}} = {{$.Dialect}}.NewViewx[*{{$tAlias.UpSingular}}, {{$tAlias.UpSingular}}Slice]("{{$table.Schema}}","{{$table.Name}}",build{{$tAlias.UpSingular}}Columns(""),build{{$tAlias.UpSingular}}Columns({{quote $table.Key}}))
// {{$tAlias.UpPlural}}Query is a query on the {{$table.Name}} view
type {{$tAlias.UpPlural}}Query = *{{$.Dialect}}.ViewQuery[*{{$tAlias.UpSingular}}, {{$tAlias.UpSingular}}Slice]
{{- else -}}
// {{$tAlias.UpPlural}} contains methods to work with the {{$table.Name}} table
var {{$tAlias.UpPlural}} = {{$.Dialect}}.NewTablex[*{{$tAlias.UpSingular}}, {{$tAlias.UpSingular}}Slice, *{{$tAlias.UpSingular}}Setter]("{{$table.Schema}}","{{$table.Name}}",build{{$tAlias.UpSingular}}Columns({{quote $table.Key}}))
var {{$tAlias.UpPlural}} = {{$.Dialect}}.NewTablex[*{{$tAlias.UpSingular}}, {{$tAlias.UpSingular}}Slice, *{{$tAlias.UpSingular}}Setter]("{{$table.Schema}}","{{$table.Name}}",build{{$tAlias.UpSingular}}Columns(""),build{{$tAlias.UpSingular}}Columns({{quote $table.Key}}))
// {{$tAlias.UpPlural}}Query is a query on the {{$table.Name}} table
type {{$tAlias.UpPlural}}Query = *{{$.Dialect}}.ViewQuery[*{{$tAlias.UpSingular}}, {{$tAlias.UpSingular}}Slice]
{{- end}}
Expand Down