Now can select by pages and added Insert which I forgot.
This commit is contained in:
parent
aa3afa0d21
commit
d59e29fdc1
1 changed files with 41 additions and 7 deletions
|
@ -9,9 +9,9 @@ import (
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SelectTable(table string, the_type reflect.Type) ([]reflect.Value, error) {
|
func SelectTable(table string, the_type reflect.Type, limit uint64, offset uint64) ([]reflect.Value, error) {
|
||||||
var results []reflect.Value
|
var results []reflect.Value
|
||||||
sql_query, args, err := sq.Select("*").From(table).ToSql()
|
sql_query, args, err := sq.Select("*").Limit(limit).Offset(offset).From(table).ToSql()
|
||||||
if err != nil { return results, err }
|
if err != nil { return results, err }
|
||||||
|
|
||||||
rows, err := data.DB.Queryx(sql_query, args...)
|
rows, err := data.DB.Queryx(sql_query, args...)
|
||||||
|
@ -48,12 +48,33 @@ func Delete(table string, id int64) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Insert(table string, value reflect.Value) error {
|
||||||
|
type_of := value.Type()
|
||||||
|
field_num := value.NumField()
|
||||||
|
var columns []string
|
||||||
|
var values []interface{}
|
||||||
|
|
||||||
|
for i := 0; i < field_num; i++ {
|
||||||
|
field := value.Field(i)
|
||||||
|
tag := type_of.Field(i).Tag.Get("db")
|
||||||
|
if tag == "id" { continue }
|
||||||
|
columns = append(columns, tag)
|
||||||
|
values = append(values, field.Interface())
|
||||||
|
}
|
||||||
|
|
||||||
|
builder := sq.Insert(table).Columns(columns...).Values(values...)
|
||||||
|
sql_query, args, err := builder.ToSql()
|
||||||
|
|
||||||
|
_, err = data.DB.Exec(sql_query, args...)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func Update(table string, value reflect.Value) error {
|
func Update(table string, value reflect.Value) error {
|
||||||
builder := sq.Update(table)
|
builder := sq.Update(table)
|
||||||
|
|
||||||
type_of := value.Type()
|
type_of := value.Type()
|
||||||
field_num := value.NumField()
|
field_num := value.NumField()
|
||||||
fmt.Printf("value has %d fields", field_num)
|
|
||||||
|
|
||||||
for i := 0; i < field_num; i++ {
|
for i := 0; i < field_num; i++ {
|
||||||
field := value.Field(i)
|
field := value.Field(i)
|
||||||
|
@ -62,7 +83,6 @@ func Update(table string, value reflect.Value) error {
|
||||||
// skip update of id to avoid replacing it
|
// skip update of id to avoid replacing it
|
||||||
if tag == "id" { continue }
|
if tag == "id" { continue }
|
||||||
|
|
||||||
fmt.Printf("\nset %v to %v", tag, field.Interface())
|
|
||||||
builder = builder.Set(tag, field.Interface())
|
builder = builder.Set(tag, field.Interface())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,8 +90,6 @@ func Update(table string, value reflect.Value) error {
|
||||||
|
|
||||||
sql_query, args, err := builder.ToSql()
|
sql_query, args, err := builder.ToSql()
|
||||||
|
|
||||||
fmt.Println("SQL: sql_query", sql_query, args, err)
|
|
||||||
|
|
||||||
_, err = data.DB.Exec(sql_query, args...)
|
_, err = data.DB.Exec(sql_query, args...)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
@ -89,7 +107,23 @@ func TestAdminIndexPage(t *testing.T) {
|
||||||
fmt.Println("\t", field.Name, field.Type, field.Tag)
|
fmt.Println("\t", field.Name, field.Type, field.Tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
all_rows, err := SelectTable(table, model)
|
for i := 0; i < 87; i++ {
|
||||||
|
val := reflect.New(model).Elem()
|
||||||
|
email := fmt.Sprintf("test%d@test.com", i)
|
||||||
|
val.FieldByName("Email").SetString(email)
|
||||||
|
val.FieldByName("Username").SetString(fmt.Sprintf("zed%d@zed.com", i))
|
||||||
|
val.FieldByName("Password").SetString("garbage")
|
||||||
|
|
||||||
|
sql_query, args, err := sq.Delete(table).Where("email", email).ToSql()
|
||||||
|
data.DB.Exec(sql_query, args...)
|
||||||
|
|
||||||
|
err = Insert(table, val)
|
||||||
|
if err != nil { fmt.Println("INSERT", err) }
|
||||||
|
}
|
||||||
|
|
||||||
|
all_rows, err := SelectTable(table, model, 20, 20 * 3)
|
||||||
|
for i, row := range all_rows { fmt.Println("row", i, row) }
|
||||||
|
|
||||||
if err != nil { fmt.Println("ERROR", err) }
|
if err != nil { fmt.Println("ERROR", err) }
|
||||||
first_row := all_rows[0]
|
first_row := all_rows[0]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue