1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

Доработки SQLite

This commit is contained in:
Anton Titovets
2024-12-30 14:21:05 +03:00
parent ee59e7d092
commit b47ef8a82c
11 changed files with 134 additions and 16 deletions

View File

@@ -7,10 +7,11 @@ edition = "2021"
crate-type = ["cdylib"]
[profile.release]
lto = true # Enable Link Time Optimization
lto = "fat" # Enable Link Time Optimization
codegen-units = 1 # Reduce number of codegen units to increase optimizations.
panic = "abort" # Abort on panic
strip = true # Automatically strip symbols from the binary.
opt-level = "z"
[dependencies]
addin1c = "0.5.0"

View File

@@ -113,7 +113,7 @@ fn rows_to_json_array(rows: &mut rusqlite::Rows, cols: &Vec<String>) -> String {
}
}
json!({ "result": json_array }).to_string()
json!({ "result": true, "data": json_array }).to_string()
}
fn from_sql_to_json(value: ValueRef) -> Value {

View File

@@ -20,7 +20,7 @@ pub fn get_params_amount(num: usize) -> usize {
match num {
0 => 0,
1 => 0,
2 => 2,
2 => 3,
_ => 0,
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_SQLite.os
// OneScript: ./OInt/core/Modules/OPI_SQLite.os
// Lib: SQLite
// CLI: sqlite
@@ -45,7 +45,7 @@
#Область ОсновныеМетоды
// Создать подключение !NOCLI
// Создать соединение !NOCLI
// Создает подключение к указанной базе
//
// Параметры:
@@ -53,7 +53,7 @@
//
// Возвращаемое значение:
// Произвольный - Объект коннектора или структура с информацией об ошибке
Функция СоздатьПодключение(Знач База = "") Экспорт
Функция ОткрытьСоединение(Знач База = "") Экспорт
Если ЭтоКоннектор(База) Тогда
Возврат База;
@@ -72,7 +72,7 @@
КонецФункции
// Закрыть подключение !NOCLI
// Закрыть соединение !NOCLI
// Явно закрывает переданное соединение
//
// Параметры:
@@ -80,7 +80,7 @@
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат закрытия соединения
Функция ЗакрытьПодключение(Знач Соединение) Экспорт
Функция ЗакрытьСоединение(Знач Соединение) Экспорт
Если ЭтоКоннектор(Соединение) Тогда
@@ -119,9 +119,10 @@
, Знач Соединение = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса);
OPI_ПреобразованиеТипов.ПолучитьБулево(ФорсироватьРезультат);
Параметры_ = ОбработатьПараметры(Параметры);
Коннектор = СоздатьПодключение(Соединение);
Коннектор = ОткрытьСоединение(Соединение);
Если ТипЗнч(Коннектор) <> Тип("AddIn.OPI_SQLite.Main") Тогда
Возврат Коннектор;

View File

@@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License
@@ -2218,7 +2218,9 @@
ПараметрыТеста = Новый Структура;
SQLite_СоздатьПодключение(ПараметрыТеста);
SQLite_ОткрытьСоединение(ПараметрыТеста);
SQLite_ЗакрытьСоединение(ПараметрыТеста);
SQLite_ВыполнитьЗапросSQL(ПараметрыТеста);
КонецПроцедуры
@@ -16065,12 +16067,12 @@
#Область SQLite
Процедура SQLite_СоздатьПодключение(ПараметрыФункции)
Процедура SQLite_ОткрытьСоединение(ПараметрыФункции)
ИВФ = ПолучитьИмяВременногоФайла("sqlite");
БазаНаДиске = OPI_SQLite.СоздатьПодключение(ИВФ);
БазаВПамяти = OPI_SQLite.СоздатьПодключение();
БазаНаДиске = OPI_SQLite.ОткрытьСоединение(ИВФ);
БазаВПамяти = OPI_SQLite.ОткрытьСоединение();
// END
@@ -16080,7 +16082,7 @@
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(БазаВПамяти, "СоздатьПодключение (im)", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(БазаВПамяти, "AddIn.OPI_SQLite.Main");
Закрытие = OPI_SQLite.ЗакрытьПодключение(БазаНаДиске);
Закрытие = OPI_SQLite.ЗакрытьСоединение(БазаНаДиске);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Закрытие, "ЗакрытьПодключение", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Закрытие);
@@ -16093,6 +16095,120 @@
КонецПроцедуры
Процедура SQLite_ЗакрытьСоединение(ПараметрыФункции)
ИВФ = ПолучитьИмяВременногоФайла("sqlite");
Соединение = OPI_SQLite.ОткрытьСоединение(ИВФ);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Соединение, "ОткрытьСоединение (закрытие)", "SQLite"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_Компонента(Соединение, "AddIn.OPI_SQLite.Main"); // SKIP
Закрытие = OPI_SQLite.ЗакрытьСоединение(Соединение);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Закрытие, "ЗакрытьПодключение", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Закрытие);
Попытка
УдалитьФайлы(ИВФ);
Исключение
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла базы", "SQLite");
КонецПопытки
КонецПроцедуры
Процедура SQLite_ВыполнитьЗапросSQL(ПараметрыФункции)
ИВФ = ПолучитьИмяВременногоФайла("sqlite");
Соединение = OPI_SQLite.ОткрытьСоединение(ИВФ);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Соединение, "ОткрытьСоединение (запрос)", "SQLite"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_Компонента(Соединение, "AddIn.OPI_SQLite.Main"); // SKIP
// CREATE
ТекстЗапроса = "
|CREATE TABLE test_table (
|id INTEGER PRIMARY KEY, -- Автоинкрементируемый целочисленный идентификатор
|name TEXT, -- Текстовое поле
|age INTEGER, -- Целое число
|salary REAL, -- Число с плавающей точкой
|is_active BOOLEAN, -- Логическое значение
|created_at DATETIME, -- Дата/время в формате ISO 8601
|data BLOB
|);";
Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВыполнитьЗапрос (Create)", "SQLite"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат); // SKIP
// INSERT с параметрами
ТекстЗапроса = "
|-- Вставляем данные с использованием позиционных параметров
|INSERT INTO test_table (name, age, salary, is_active, created_at, data)
|VALUES (?1, ?2, ?3, ?4, ?5, ?6);";
МассивПараметров = Новый Массив;
МассивПараметров.Добавить("Vitaly"); // TEXT
МассивПараметров.Добавить(25); // INTEGER
МассивПараметров.Добавить(1000.12); // REAL
МассивПараметров.Добавить(Истина); // BOOL
МассивПараметров.Добавить(OPI_Инструменты.ПолучитьТекущуюДату()); // DATETIME
МассивПараметров.Добавить(ПолучитьДвоичныеДанныеИзСтроки("Hello world")); // BLOB
Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, МассивПараметров, , Соединение);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВыполнитьЗапрос (Insert)", "SQLite"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат); // SKIP
// SELECT (Результат этого запроса приведен в следующем блоке)
ТекстЗапроса = "SELECT id, name, age, salary, is_active, created_at, data FROM test_table;";
Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВыполнитьЗапрос (Select)", "SQLite"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат); // SKIP
// Транзакция
ТекстЗапроса = "BEGIN TRANSACTION;
| CREATE TABLE IF NOT EXISTS users (
| id INTEGER PRIMARY KEY AUTOINCREMENT,
| name TEXT NOT NULL,
| age INTEGER NOT NULL
| );
| INSERT INTO users (name, age) VALUES ('Alice', 30);
| INSERT INTO users (name, age) VALUES ('Bob', 25);
| INSERT INTO users (name, age) VALUES ('Charlie', 35);
| COMMIT;";
Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВыполнитьЗапрос (Transaction)", "SQLite"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат); // SKIP
Закрытие = OPI_SQLite.ЗакрытьСоединение(Соединение);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗакрытьПодключение (запрос)", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
Попытка
УдалитьФайлы(ИВФ);
Исключение
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла базы", "SQLite");
КонецПопытки
КонецПроцедуры
#КонецОбласти
#КонецОбласти