|
|
|
@ -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) |
|
|
|
|