You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
888 B
Go

package main
import (
"database/sql"
"fmt"
)
type IdTable interface {
PrimaryKey() *string
Columns() []any
}
type Ref[T IdTable] string
type Table[T IdTable] struct {
Name string
PkColumn string
// Columns []string
}
type DB = *sql.DB
func Create[T IdTable](d DB, t Table[T], row T) (Ref[T], error) {
var zero Ref[T]
return zero, nil
}
func Insert[T IdTable](d DB, t Table[T], row T) (Ref[T], error) {
var zero Ref[T]
return zero, nil
}
func Read[T IdTable](d DB, t Table[T], ref Ref[T]) (*T, error) {
result := d.QueryRow(fmt.Sprintf(`SELECT * FROM %s WHERE %s = ?`, t.Name, t.PkColumn), string(ref))
var value T
if err := result.Scan(value.Columns()...); err != nil {
return nil, err
}
return &value, nil
}
func Update[T IdTable](d DB, t Table[T], row T) error {
return nil
}
func Delete[T IdTable](d DB, t Table[T], id string) error {
return nil
}