committed by
GitHub
5 changed files with 94 additions and 5 deletions
-
2weed/command/command.go
-
10weed/command/filer.go
-
1weed/command/server.go
-
72weed/filer/mysql_store/mysql_store.go
-
8weed/server/filer_server.go
@ -0,0 +1,72 @@ |
|||
package mysql_store |
|||
|
|||
import ( |
|||
"database/sql" |
|||
"fmt" |
|||
_ "github.com/go-sql-driver/mysql" |
|||
) |
|||
|
|||
var maxOpen int = 100 |
|||
|
|||
type MysqlStore struct { |
|||
Client *sql.DB |
|||
table string |
|||
fnameCol string |
|||
fidCol string |
|||
getStmt *sql.Stmt |
|||
putStmt *sql.Stmt |
|||
delStmt *sql.Stmt |
|||
} |
|||
|
|||
func NewMysqlStore(dataSourceName string, table, fnameCol, fidCol string) (m *MysqlStore, err error) { |
|||
db, err := sql.Open("mysql", dataSourceName) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
db.SetMaxOpenConns(maxOpen) |
|||
db.SetMaxIdleConns(maxOpen / 2) |
|||
getStmt, err := db.Prepare(fmt.Sprintf("select %s from %s where %s=?", fidCol, table, fnameCol)) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
putStmt, err := db.Prepare(fmt.Sprintf("insert into %s(%s,%s) values(?,?)", table, fnameCol, fidCol)) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
delStmt, err := db.Prepare(fmt.Sprintf("delete from %s where %s=?", table, fnameCol)) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
return &MysqlStore{db, table, fnameCol, fidCol, getStmt, putStmt, delStmt}, nil |
|||
} |
|||
|
|||
func (s *MysqlStore) Get(fullFileName string) (fid string, err error) { |
|||
err = s.getStmt.QueryRow(fullFileName).Scan(&fid) |
|||
return fid, err |
|||
} |
|||
|
|||
func (s *MysqlStore) Put(fullFileName string, fid string) (err error) { |
|||
_, err = s.putStmt.Exec(fullFileName, fid) |
|||
return err |
|||
} |
|||
|
|||
func (s *MysqlStore) Delete(fullFileName string) (err error) { |
|||
_, err = s.delStmt.Exec(fullFileName) |
|||
return err |
|||
} |
|||
|
|||
func (s *MysqlStore) Close() { |
|||
if s.getStmt != nil { |
|||
s.getStmt.Close() |
|||
} |
|||
if s.putStmt != nil { |
|||
s.putStmt.Close() |
|||
} |
|||
if s.delStmt != nil { |
|||
s.delStmt.Close() |
|||
} |
|||
if s.Client != nil { |
|||
s.Client.Close() |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue