init here

This commit is contained in:
2025-11-26 21:32:41 +03:00
commit 33c97acade
91 changed files with 9155 additions and 0 deletions

View 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
пока ай < длина(аргументы) {
собранное прошение := строка.собрать(собранное прошение, части прошения[ай], экранировать(тег(аргументы[ай]), нечто(аргументы[ай])))
ай++
}
собранное прошение := строка.собрать(собранное прошение, части прошения[ай])
вернуть к.запросить(собранное прошение, оплошность)
}