Update: skip file when exists in database
This commit is contained in:
@@ -188,6 +188,15 @@ func (database *Database) FindFolder(folder string) (int64, error) {
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (database *Database) FindFile(folderId int64, filename string) (int64, error) {
|
||||
var id int64
|
||||
err := database.stmt.findFile.QueryRow(folderId, filename).Scan(&id)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (database *Database) InsertFolder(folder string) (int64, error) {
|
||||
result, err := database.stmt.insertFolder.Exec(folder, filepath.Base(folder))
|
||||
if err != nil {
|
||||
@@ -217,6 +226,13 @@ func (database *Database) Insert(path string, filesize int64) error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// if file exists, skip it
|
||||
_, err = database.FindFile(folderId, filename)
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = database.InsertFile(folderId, filename, filesize)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -29,6 +29,8 @@ VALUES (?, ?);`
|
||||
|
||||
var findFolderQuery = `SELECT id FROM folders WHERE folder = ? LIMIT 1;`
|
||||
|
||||
var findFileQuery = `SELECT id FROM files WHERE folder_id = ? AND filename = ? LIMIT 1;`
|
||||
|
||||
var insertFileQuery = `INSERT INTO files (folder_id, filename, filesize)
|
||||
VALUES (?, ?, ?);`
|
||||
|
||||
@@ -82,6 +84,7 @@ type Stmt struct {
|
||||
insertFolder *sql.Stmt
|
||||
insertFile *sql.Stmt
|
||||
findFolder *sql.Stmt
|
||||
findFile *sql.Stmt
|
||||
searchFiles *sql.Stmt
|
||||
getFolder *sql.Stmt
|
||||
dropFiles *sql.Stmt
|
||||
@@ -142,6 +145,12 @@ func NewPreparedStatement(sqlConn *sql.DB) (*Stmt, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// init findFile statement
|
||||
stmt.findFile, err = sqlConn.Prepare(findFileQuery)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// init insertFile stmt
|
||||
stmt.insertFile, err = sqlConn.Prepare(insertFileQuery)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user