|
|
SQLite функции на TCL
Думаю, всем известна библиотека SQLite, предназначенная для организации хранения данных
с поддержкой SQL-синтаксиса операций по манипулированию хранимыми данными.
Эта библиотека является, практически, стандартом по хранению внешних данных для тысяч приложений, в особенности для встраиваемых устройств.
Я часто в поле таблицы базы данных храню данные описанные как tcl-список. Особенно в случаях, частого изменения
структуры списка в результате развития программы. Это удобнее чем расширение полей таблицы базы данных.
Но, для выполнения операций поиска, сравнения, модификации ... данного поля, представленного как tcl-список, удобно иметь
набор встроеных SQLite-фуекций.
Этим мы сейчас и займёмся.
# Загружаем sqlite библиотеку
package require sqlite
# Создаём файл базы данных под именем test.db
sqlite3 db test.db
# Создаём таблицу базы данных под именем tbl
db eval "create table tbl (a text)"
# Наполняем таблицу тестовыми данными
db eval "insert into tbl values('0 1 2 3 4 5 6 7 8 9')"
db eval "insert into tbl values('q w e r t y u i o p')"
# Создаём tcl-процедуру, по извлечению любого элемента списка с любого поля любой таблицы БД
proc sqlite:lindex { args } {
return [eval lindex $args]
}
# Определяем tcl-процедуру как функцию SQLite
dbcmd function lindex sqlite:lindex
# Извлекаем четвёртый элемент списка в SQL-запросе
db eval "select lindex(a,4) from tbl"
Результат:
row1> 4
row2> t
# Извлекаем из таблицы строку, со значением 't' в четвёртом элементе списка
db eval "select * from tbl where lindex(a,4) = 't'"
Результат:
row1> q w e r t y u i o p
|