124 lines
1.9 KiB
Go
124 lines
1.9 KiB
Go
package qcode
|
|
|
|
import (
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
type Config struct {
|
|
Blocklist []string
|
|
KeepArgs bool
|
|
}
|
|
|
|
type QueryConfig struct {
|
|
Limit int
|
|
Filters []string
|
|
Columns []string
|
|
DisableFunctions bool
|
|
}
|
|
|
|
type InsertConfig struct {
|
|
Filters []string
|
|
Columns []string
|
|
Presets map[string]string
|
|
}
|
|
|
|
type UpdateConfig struct {
|
|
Filters []string
|
|
Columns []string
|
|
Presets map[string]string
|
|
}
|
|
|
|
type DeleteConfig struct {
|
|
Filters []string
|
|
Columns []string
|
|
}
|
|
|
|
type TRConfig struct {
|
|
Query QueryConfig
|
|
Insert InsertConfig
|
|
Update UpdateConfig
|
|
Delete DeleteConfig
|
|
}
|
|
|
|
type trval struct {
|
|
query struct {
|
|
limit string
|
|
fil *Exp
|
|
cols map[string]struct{}
|
|
disable struct {
|
|
funcs bool
|
|
}
|
|
}
|
|
|
|
insert struct {
|
|
fil *Exp
|
|
cols map[string]struct{}
|
|
psmap map[string]string
|
|
pslist []string
|
|
}
|
|
|
|
update struct {
|
|
fil *Exp
|
|
cols map[string]struct{}
|
|
psmap map[string]string
|
|
pslist []string
|
|
}
|
|
|
|
delete struct {
|
|
fil *Exp
|
|
cols map[string]struct{}
|
|
}
|
|
}
|
|
|
|
func (trv *trval) allowedColumns(qt QType) map[string]struct{} {
|
|
switch qt {
|
|
case QTQuery:
|
|
return trv.query.cols
|
|
case QTInsert:
|
|
return trv.insert.cols
|
|
case QTUpdate:
|
|
return trv.update.cols
|
|
case QTDelete:
|
|
return trv.insert.cols
|
|
case QTUpsert:
|
|
return trv.insert.cols
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (trv *trval) filter(qt QType) *Exp {
|
|
switch qt {
|
|
case QTQuery:
|
|
return trv.query.fil
|
|
case QTInsert:
|
|
return trv.insert.fil
|
|
case QTUpdate:
|
|
return trv.update.fil
|
|
case QTDelete:
|
|
return trv.delete.fil
|
|
case QTUpsert:
|
|
return trv.insert.fil
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func listToMap(list []string) map[string]struct{} {
|
|
m := make(map[string]struct{}, len(list))
|
|
for i := range list {
|
|
m[strings.ToLower(list[i])] = struct{}{}
|
|
}
|
|
return m
|
|
}
|
|
|
|
func mapToList(m map[string]string) []string {
|
|
list := []string{}
|
|
for k, _ := range m {
|
|
list = append(list, strings.ToLower(k))
|
|
}
|
|
sort.Strings(list)
|
|
return list
|
|
}
|