Update: skip file when exists in database

This commit is contained in:
2021-12-10 20:46:26 +08:00
parent 7e5c92dd63
commit fdd41397bf
2 changed files with 25 additions and 0 deletions

View File

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

View File

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