init here
This commit is contained in:
101
исх/бд/скуля/скуля.tri
Normal file
101
исх/бд/скуля/скуля.tri
Normal file
@@ -0,0 +1,101 @@
|
||||
модуль скуля
|
||||
осторожно // cognitohazard!
|
||||
|
||||
импорт "стд::вывод"
|
||||
импорт "исх/спринтф"
|
||||
импорт "исх/строка"
|
||||
импорт "исх/форматы/джесон"
|
||||
|
||||
// c:include "sckulya.h"
|
||||
|
||||
фн tri_sqlite_open(файл: Строка, оплошность := Строка): Цел64 @внеш
|
||||
фн tri_sqlite_close(бд: Цел64): Цел64 @внеш
|
||||
фн tri_sqlite_exec(бд: Цел64, прошение: Строка, оплошность := Строка) @внеш
|
||||
фн tri_sqlite_query(бд: Цел64, прошение: Строка, результат := Строка, оплошность := Строка): Цел64 @внеш
|
||||
|
||||
тип Картотека* = класс {
|
||||
ручка: Цел64 := -1
|
||||
}
|
||||
|
||||
фн открыть картотеку*(путь: Строка): Картотека {
|
||||
пусть оплошность := ""
|
||||
пусть ручка = tri_sqlite_open(путь, оплошность)
|
||||
|
||||
если оплошность # "" {
|
||||
авария(спринтф.ф("не удалось открыть картотеку: $стр", оплошность))
|
||||
}
|
||||
|
||||
вернуть Картотека{
|
||||
ручка: ручка
|
||||
}
|
||||
}
|
||||
|
||||
фн (к: Картотека) закрыть*() {
|
||||
пусть код = tri_sqlite_close(к.ручка)
|
||||
|
||||
если код # 0 {
|
||||
авария(спринтф.ф("не удалось закрыть картотеку, код $цел", код))
|
||||
}
|
||||
}
|
||||
|
||||
фн (к: Картотека) выполнить*(прошение: Строка, оплошность := Строка) {
|
||||
tri_sqlite_exec(к.ручка, прошение, оплошность)
|
||||
}
|
||||
|
||||
фн (к: Картотека) запросить*(прошение: Строка, оплошность := Строка): джесон.ДжесонМногоЗначений {
|
||||
пусть результат := ""
|
||||
пусть код = tri_sqlite_query(к.ручка, прошение, результат, оплошность)
|
||||
|
||||
если оплошность # "" {
|
||||
вернуть джесон.ДжесонМногоЗначений{}
|
||||
}
|
||||
|
||||
пусть объект = джесон.парсить(спринтф.ф("{\"данные\": $стр}", результат), оплошность)
|
||||
|
||||
если оплошность # "" {
|
||||
вернуть джесон.ДжесонМногоЗначений{}
|
||||
}
|
||||
|
||||
вернуть объект.значения[0].значение(:джесон.ДжесонМногоЗначений)
|
||||
}
|
||||
|
||||
тип Аргумент = класс {
|
||||
|
||||
}
|
||||
|
||||
фн экранировать(т аргумента: Слово64, аргумент: *): Строка {
|
||||
пусть кек = аргумент(:Слово64)
|
||||
|
||||
если т аргумента = тег(Строка) {
|
||||
пусть знач = кек(:осторожно Строка)
|
||||
|
||||
вернуть спринтф.ф("'$стр'", строка.заменить(знач, "'", "''"))
|
||||
}
|
||||
|
||||
если т аргумента = тег(Цел64) {
|
||||
пусть знач = кек(:осторожно Цел64)
|
||||
вернуть спринтф.ф("$цел", знач)
|
||||
}
|
||||
|
||||
авария("неподдерживаемый тип аргумента")
|
||||
}
|
||||
|
||||
фн (к: Картотека) запросить безопасно*(прошение: Строка, оплошность := Строка, аргументы: ...*): джесон.ДжесонМногоЗначений {
|
||||
пусть части прошения = строка.разобрать(прошение, "?")
|
||||
|
||||
если длина(части прошения) - 1 # длина(аргументы) {
|
||||
авария("число аргументов не совпадает с числом подстановок")
|
||||
}
|
||||
|
||||
пусть собранное прошение := ""
|
||||
|
||||
пусть ай := 0
|
||||
пока ай < длина(аргументы) {
|
||||
собранное прошение := строка.собрать(собранное прошение, части прошения[ай], экранировать(тег(аргументы[ай]), нечто(аргументы[ай])))
|
||||
ай++
|
||||
}
|
||||
|
||||
собранное прошение := строка.собрать(собранное прошение, части прошения[ай])
|
||||
|
||||
вернуть к.запросить(собранное прошение, оплошность)
|
||||
}
|
||||
Reference in New Issue
Block a user