-
Notifications
You must be signed in to change notification settings - Fork 0
/
database.sh
60 lines (55 loc) · 3.29 KB
/
database.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
#
# Поисковик стикеров в Telegram
# Copyright (c) Гурьев Николай, 2017
#
# Эта программа является свободным программным обеспечением: Вы можете
# распространять её и (или) изменять, соблюдая условия Генеральной публичной
# лицензии GNU Affero, опубликованной Фондом свободного программного
# обеспечения; либо редакции 3 Лицензии, либо (на Ваше усмотрение) любой
# редакции, выпущенной позже.
#
# Эта программа распространяется в расчёте на то, что она окажется полезной, но
# БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая подразумеваемую гарантию КАЧЕСТВА либо
# ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ.
#
# Ознакомьтесь с Генеральной публичной лицензией GNU Affero для получения более
# подробной информации. Вы должны были получить копию Генеральной публичной
# лицензии GNU Affero вместе с этой программой. Если Вы ее не получили, то
# перейдите по адресу: <https://www.gnu.org/licenses/agpl.html>.
# Функция обращения к СУБД вынесена в отдельный модуль. База данных ищется в
# файле, заданным переменной окружения DB_FILENAME. Если файл не существует, он
# создаётся на основе заданной схемы.
set -e
# Выполняет обращения в БД.
#
# Параметры:
# $1 ~ SQL запрос
#
# Результат запроса (если есть) печатается на стандартный поток вывода. Статус
# выхода - результат выполнения запроса, ошибки печатаются в стандартный поток
# ошибок. Также печатается текст выполняемого запроса, если переменная окружения
# DEBUG непуста.
#
function sql::query {
if [ -n "${DEBUG}" ]; then
# Позволяет замену множества пробелов на один.
# shellcheck disable=SC2086
echo $1\; >&2
fi
sqlite3 "${DB_FILENAME}" "$1"
}
# Экранирование строковых данных для SQL. Точнее говоря, формирование
# подходящего строкового литерала из переданных данных для передачи в запросе.
#
# Параметров нету, данные читаются с стандартного ввода.
#
# Результат выводится на стандартный вывод
#
function sql::to_literal {
sed "s/'/''/g;s/^/'/;s/$/'/"
}
if [ -n "${DB_FILENAME}" ] && ! [ -f "${DB_FILENAME}" ]; then
sqlite3 "${DB_FILENAME}" <schema.sql
echo "Создана новая база данных: ${DB_FILENAME}" >&2
fi