Files
msw-open-music/pkg/database/sql_stmt.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
}