216 lines
4.8 KiB
Go
216 lines
4.8 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
)
|
|
|
|
var initFilesTableQuery = `CREATE TABLE IF NOT EXISTS files (
|
|
id INTEGER PRIMARY KEY,
|
|
folder_id INTEGER NOT NULL,
|
|
filename TEXT NOT NULL,
|
|
filesize INTEGER NOT NULL
|
|
);`
|
|
|
|
var initFoldersTableQuery = `CREATE TABLE IF NOT EXISTS folders (
|
|
id INTEGER PRIMARY KEY,
|
|
folder TEXT NOT NULL,
|
|
foldername TEXT NOT NULL
|
|
);`
|
|
|
|
var initFeedbacksTableQuery = `CREATE TABLE IF NOT EXISTS feedbacks (
|
|
id INTEGER PRIMARY KEY,
|
|
time INTEGER NOT NULL,
|
|
feedback TEXT NOT NULL,
|
|
header TEXT NOT NULL
|
|
);`
|
|
|
|
var insertFolderQuery = `INSERT INTO folders (folder, foldername)
|
|
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 (?, ?, ?);`
|
|
|
|
var searchFilesQuery = `SELECT
|
|
files.id, files.folder_id, files.filename, folders.foldername, files.filesize
|
|
FROM files
|
|
JOIN folders ON files.folder_id = folders.id
|
|
WHERE filename LIKE ?
|
|
LIMIT ? OFFSET ?;`
|
|
|
|
var getFolderQuery = `SELECT folder FROM folders WHERE id = ? LIMIT 1;`
|
|
|
|
var dropFilesQuery = `DROP TABLE files;`
|
|
|
|
var dropFolderQuery = `DROP TABLE folders;`
|
|
|
|
var getFileQuery = `SELECT
|
|
files.id, files.folder_id, files.filename, folders.foldername, files.filesize
|
|
FROM files
|
|
JOIN folders ON files.folder_id = folders.id
|
|
WHERE files.id = ?
|
|
LIMIT 1;`
|
|
|
|
var searchFoldersQuery = `SELECT
|
|
id, folder, foldername
|
|
FROM folders
|
|
WHERE foldername LIKE ?
|
|
LIMIT ? OFFSET ?;`
|
|
|
|
var getFilesInFolderQuery = `SELECT
|
|
files.id, files.filename, files.filesize, folders.foldername
|
|
FROM files
|
|
JOIN folders ON files.folder_id = folders.id
|
|
WHERE folder_id = ?
|
|
LIMIT ? OFFSET ?;`
|
|
|
|
var getRandomFilesQuery = `SELECT
|
|
files.id, files.folder_id, files.filename, folders.foldername, files.filesize
|
|
FROM files
|
|
JOIN folders ON files.folder_id = folders.id
|
|
ORDER BY RANDOM()
|
|
LIMIT ?;`
|
|
|
|
var insertFeedbackQuery = `INSERT INTO feedbacks (time, feedback, header)
|
|
VALUES (?, ?, ?);`
|
|
|
|
type Stmt struct {
|
|
initFilesTable *sql.Stmt
|
|
initFoldersTable *sql.Stmt
|
|
initFeedbacksTable *sql.Stmt
|
|
insertFolder *sql.Stmt
|
|
insertFile *sql.Stmt
|
|
findFolder *sql.Stmt
|
|
findFile *sql.Stmt
|
|
searchFiles *sql.Stmt
|
|
getFolder *sql.Stmt
|
|
dropFiles *sql.Stmt
|
|
dropFolder *sql.Stmt
|
|
getFile *sql.Stmt
|
|
searchFolders *sql.Stmt
|
|
getFilesInFolder *sql.Stmt
|
|
getRandomFiles *sql.Stmt
|
|
insertFeedback *sql.Stmt
|
|
}
|
|
|
|
func NewPreparedStatement(sqlConn *sql.DB) (*Stmt, error) {
|
|
var err error
|
|
|
|
stmt := &Stmt{}
|
|
|
|
// init files table
|
|
stmt.initFilesTable, err = sqlConn.Prepare(initFilesTableQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init folders table
|
|
stmt.initFoldersTable, err = sqlConn.Prepare(initFoldersTableQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init feedbacks tables
|
|
stmt.initFeedbacksTable, err = sqlConn.Prepare(initFeedbacksTableQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// run init statement
|
|
_, err = stmt.initFilesTable.Exec()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_, err = stmt.initFoldersTable.Exec()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_, err = stmt.initFeedbacksTable.Exec()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init insert folder statement
|
|
stmt.insertFolder, err = sqlConn.Prepare(insertFolderQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init findFolder statement
|
|
stmt.findFolder, err = sqlConn.Prepare(findFolderQuery)
|
|
if err != nil {
|
|
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 {
|
|
return nil, err
|
|
}
|
|
|
|
// init searchFile stmt
|
|
stmt.searchFiles, err = sqlConn.Prepare(searchFilesQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init getFolder stmt
|
|
stmt.getFolder, err = sqlConn.Prepare(getFolderQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init dropFolder stmt
|
|
stmt.dropFolder, err = sqlConn.Prepare(dropFolderQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init dropFiles stmt
|
|
stmt.dropFiles, err = sqlConn.Prepare(dropFilesQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init getFile stmt
|
|
stmt.getFile, err = sqlConn.Prepare(getFileQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init searchFolder stmt
|
|
stmt.searchFolders, err = sqlConn.Prepare(searchFoldersQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init getFilesInFolder stmt
|
|
stmt.getFilesInFolder, err = sqlConn.Prepare(getFilesInFolderQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init getRandomFiles
|
|
stmt.getRandomFiles, err = sqlConn.Prepare(getRandomFilesQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// init insertFeedback
|
|
stmt.insertFeedback, err = sqlConn.Prepare(insertFeedbackQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return stmt, err
|
|
}
|