mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-12 10:10:25 +00:00
✏️ 修正 sql
This commit is contained in:
@@ -6,8 +6,8 @@ import zero "github.com/wdvxdr1123/ZeroBot"
|
||||
func FirstValueInList(list []string) zero.Rule {
|
||||
return func(ctx *zero.Ctx) bool {
|
||||
first := ctx.State["regex_matched"].([]string)[1]
|
||||
for i := range list {
|
||||
if first == list[i] {
|
||||
for _, v := range list {
|
||||
if first == v {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,27 @@ type Sqlite struct {
|
||||
DBPath string
|
||||
}
|
||||
|
||||
// Open 打开数据库
|
||||
func (db *Sqlite) Open() (err error) {
|
||||
if db.DB == nil {
|
||||
database, err := sql.Open("sqlite3", db.DBPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
db.DB = database
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Close 关闭数据库
|
||||
func (db *Sqlite) Close() (err error) {
|
||||
if db.DB != nil {
|
||||
err = db.DB.Close()
|
||||
db.DB = nil
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Create 生成数据库
|
||||
// 默认结构体的第一个元素为主键
|
||||
// 返回错误
|
||||
@@ -57,7 +78,7 @@ func (db *Sqlite) Create(table string, objptr interface{}) (err error) {
|
||||
// 默认结构体的第一个元素为主键
|
||||
// 返回错误
|
||||
func (db *Sqlite) Insert(table string, objptr interface{}) error {
|
||||
rows, err := db.DB.Query("SELECT * FROM " + table + ";")
|
||||
rows, err := db.DB.Query("SELECT * FROM " + table + " limit 1;")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -67,9 +88,9 @@ func (db *Sqlite) Insert(table string, objptr interface{}) error {
|
||||
tags, _ := rows.Columns()
|
||||
rows.Close()
|
||||
var (
|
||||
values = values(objptr)
|
||||
top = len(tags) - 1
|
||||
cmd = []string{}
|
||||
vals = values(objptr)
|
||||
top = len(tags) - 1
|
||||
cmd = []string{}
|
||||
)
|
||||
cmd = append(cmd, "REPLACE INTO")
|
||||
cmd = append(cmd, table)
|
||||
@@ -105,7 +126,7 @@ func (db *Sqlite) Insert(table string, objptr interface{}) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = stmt.Exec(values...)
|
||||
_, err = stmt.Exec(vals...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -173,7 +194,7 @@ func (db *Sqlite) ListTables() (s []string, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// Del 删除数据库
|
||||
// Del 删除数据库表项
|
||||
// condition 可为"WHERE id = 0"
|
||||
// 返回错误
|
||||
func (db *Sqlite) Del(table string, condition string) error {
|
||||
@@ -192,11 +213,27 @@ func (db *Sqlite) Del(table string, condition string) error {
|
||||
return stmt.Close()
|
||||
}
|
||||
|
||||
// Truncate 清空数据库表
|
||||
func (db *Sqlite) Truncate(table string) error {
|
||||
var cmd = []string{}
|
||||
cmd = append(cmd, "TRUNCATE TABLE")
|
||||
cmd = append(cmd, table)
|
||||
stmt, err := db.DB.Prepare(strings.Join(cmd, " ") + ";")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = stmt.Exec()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return stmt.Close()
|
||||
}
|
||||
|
||||
// Count 查询数据库行数
|
||||
// 返回行数以及错误
|
||||
func (db *Sqlite) Count(table string) (num int, err error) {
|
||||
var cmd = []string{}
|
||||
cmd = append(cmd, "SELECT * FROM")
|
||||
cmd = append(cmd, "SELECT COUNT(1) FROM")
|
||||
cmd = append(cmd, table)
|
||||
rows, err := db.DB.Query(strings.Join(cmd, " ") + ";")
|
||||
if err != nil {
|
||||
@@ -205,8 +242,8 @@ func (db *Sqlite) Count(table string) (num int, err error) {
|
||||
if rows.Err() != nil {
|
||||
return num, rows.Err()
|
||||
}
|
||||
for rows.Next() {
|
||||
num++
|
||||
if rows.Next() {
|
||||
rows.Scan(&num)
|
||||
}
|
||||
rows.Close()
|
||||
return num, nil
|
||||
@@ -236,8 +273,22 @@ func kinds(objptr interface{}) []string {
|
||||
}
|
||||
for i, flen := 0, elem.Type().NumField(); i < flen; i++ {
|
||||
switch elem.Field(i).Type().String() {
|
||||
case "int64":
|
||||
case "int8":
|
||||
kinds = append(kinds, "TINYINT")
|
||||
case "uint8", "byte":
|
||||
kinds = append(kinds, "UNSIGNED TINYINT")
|
||||
case "int16":
|
||||
kinds = append(kinds, "SMALLINT")
|
||||
case "uint16":
|
||||
kinds = append(kinds, "UNSIGNED SMALLINT")
|
||||
case "int32":
|
||||
kinds = append(kinds, "INT")
|
||||
case "uint32":
|
||||
kinds = append(kinds, "UNSIGNED INT")
|
||||
case "int64":
|
||||
kinds = append(kinds, "BIGINT")
|
||||
case "uint64":
|
||||
kinds = append(kinds, "UNSIGNED BIGINT")
|
||||
case "string":
|
||||
kinds = append(kinds, "TEXT")
|
||||
default:
|
||||
@@ -256,14 +307,7 @@ func values(objptr interface{}) []interface{} {
|
||||
elem = elem.Field(0)
|
||||
}
|
||||
for i, flen := 0, elem.Type().NumField(); i < flen; i++ {
|
||||
switch elem.Field(i).Type().String() {
|
||||
case "int64":
|
||||
values = append(values, elem.Field(i).Int())
|
||||
case "string":
|
||||
values = append(values, elem.Field(i).String())
|
||||
default:
|
||||
values = append(values, elem.Field(i).String())
|
||||
}
|
||||
values = append(values, elem.Field(i).Interface())
|
||||
}
|
||||
return values
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user