Mostly done now, search works.

This commit is contained in:
Zed A. Shaw 2025-07-28 03:30:34 -04:00
parent 51b18823ae
commit c29077aa4c
4 changed files with 72 additions and 12 deletions

View file

@ -8,8 +8,48 @@ import (
sq "github.com/Masterminds/squirrel"
)
func SelectTable(table string, the_type reflect.Type, limit uint64, page uint64) ([]interface{}, error) {
var results []interface{}
func SearchTable(search string, table string, the_type reflect.Type, limit uint64, page uint64) ([]any, error) {
var results []any
like := fmt.Sprint("%", search, "%")
builder := sq.Select("*").
Limit(limit).
Offset(limit * page).
From(table)
field_num := the_type.NumField()
var or_clause sq.Or
for i := 0; i < field_num; i++ {
tag := the_type.Field(i).Tag.Get("db")
or_clause = append(or_clause, sq.Like{tag: like})
}
builder = builder.Where(or_clause)
sql_query, args, err := builder.ToSql()
fmt.Println("-------------- SQL QUERY:", sql_query);
if err != nil { return results, err }
// BUG: refactor this to share a common func with SelectTable
rows, err := data.DB.Queryx(sql_query, args...)
if err != nil { return results, err }
defer rows.Close()
for rows.Next() {
the_data := reflect.New(the_type).Interface()
err = rows.StructScan(the_data)
if err != nil { return results, err }
results = append(results, the_data)
}
return results, rows.Err()
}
func SelectTable(table string, the_type reflect.Type, limit uint64, page uint64) ([]any, error) {
var results []any
sql_query, args, err := sq.Select("*").Limit(limit).Offset(limit * page).From(table).ToSql()
if err != nil { return results, err }
@ -51,7 +91,7 @@ func Insert(table string, value reflect.Value) (int64, int64, error) {
type_of := value.Type()
field_num := value.NumField()
var columns []string
var values []interface{}
var values []any
for i := 0; i < field_num; i++ {
field := value.Field(i)