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"] crate-type = ["cdylib"]
[profile.release] [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. codegen-units = 1 # Reduce number of codegen units to increase optimizations.
panic = "abort" # Abort on panic panic = "abort" # Abort on panic
strip = true # Automatically strip symbols from the binary. strip = true # Automatically strip symbols from the binary.
opt-level = "z"
[dependencies] [dependencies]
addin1c = "0.5.0" 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 { fn from_sql_to_json(value: ValueRef) -> Value {

View File

@@ -20,7 +20,7 @@ pub fn get_params_amount(num: usize) -> usize {
match num { match num {
0 => 0, 0 => 0,
1 => 0, 1 => 0,
2 => 2, 2 => 3,
_ => 0, _ => 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 // Lib: SQLite
// CLI: sqlite // CLI: sqlite
@@ -45,7 +45,7 @@
#Область ОсновныеМетоды #Область ОсновныеМетоды
// Создать подключение !NOCLI // Создать соединение !NOCLI
// Создает подключение к указанной базе // Создает подключение к указанной базе
// //
// Параметры: // Параметры:
@@ -53,7 +53,7 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный - Объект коннектора или структура с информацией об ошибке // Произвольный - Объект коннектора или структура с информацией об ошибке
Функция СоздатьПодключение(Знач База = "") Экспорт Функция ОткрытьСоединение(Знач База = "") Экспорт
Если ЭтоКоннектор(База) Тогда Если ЭтоКоннектор(База) Тогда
Возврат База; Возврат База;
@@ -72,7 +72,7 @@
КонецФункции КонецФункции
// Закрыть подключение !NOCLI // Закрыть соединение !NOCLI
// Явно закрывает переданное соединение // Явно закрывает переданное соединение
// //
// Параметры: // Параметры:
@@ -80,7 +80,7 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура Из КлючИЗначение - Результат закрытия соединения // Структура Из КлючИЗначение - Результат закрытия соединения
Функция ЗакрытьПодключение(Знач Соединение) Экспорт Функция ЗакрытьСоединение(Знач Соединение) Экспорт
Если ЭтоКоннектор(Соединение) Тогда Если ЭтоКоннектор(Соединение) Тогда
@@ -119,14 +119,15 @@
, Знач Соединение = "") Экспорт , Знач Соединение = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса); OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса);
OPI_ПреобразованиеТипов.ПолучитьБулево(ФорсироватьРезультат);
Параметры_ = ОбработатьПараметры(Параметры); Параметры_ = ОбработатьПараметры(Параметры);
Коннектор = СоздатьПодключение(Соединение); Коннектор = ОткрытьСоединение(Соединение);
Если ТипЗнч(Коннектор) <> Тип("AddIn.OPI_SQLite.Main") Тогда Если ТипЗнч(Коннектор) <> Тип("AddIn.OPI_SQLite.Main") Тогда
Возврат Коннектор; Возврат Коннектор;
КонецЕсли; КонецЕсли;
Результат = Коннектор.Execute(ТекстЗапроса, Параметры_, ФорсироватьРезультат); Результат = Коннектор.Execute(ТекстЗапроса, Параметры_, ФорсироватьРезультат);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат, Ложь); Результат = OPI_Инструменты.JsonВСтруктуру(Результат, Ложь);

View File

@@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os // OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License // MIT License
@@ -2218,7 +2218,9 @@
ПараметрыТеста = Новый Структура; ПараметрыТеста = Новый Структура;
SQLite_СоздатьПодключение(ПараметрыТеста); SQLite_ОткрытьСоединение(ПараметрыТеста);
SQLite_ЗакрытьСоединение(ПараметрыТеста);
SQLite_ВыполнитьЗапросSQL(ПараметрыТеста);
КонецПроцедуры КонецПроцедуры
@@ -16065,12 +16067,12 @@
#Область SQLite #Область SQLite
Процедура SQLite_СоздатьПодключение(ПараметрыФункции) Процедура SQLite_ОткрытьСоединение(ПараметрыФункции)
ИВФ = ПолучитьИмяВременногоФайла("sqlite"); ИВФ = ПолучитьИмяВременногоФайла("sqlite");
БазаНаДиске = OPI_SQLite.СоздатьПодключение(ИВФ); БазаНаДиске = OPI_SQLite.ОткрытьСоединение(ИВФ);
БазаВПамяти = OPI_SQLite.СоздатьПодключение(); БазаВПамяти = OPI_SQLite.ОткрытьСоединение();
// END // END
@@ -16080,7 +16082,7 @@
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(БазаВПамяти, "СоздатьПодключение (im)", "SQLite"); OPI_ПолучениеДанныхТестов.ЗаписатьЛог(БазаВПамяти, "СоздатьПодключение (im)", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(БазаВПамяти, "AddIn.OPI_SQLite.Main"); OPI_ПолучениеДанныхТестов.Проверка_Компонента(БазаВПамяти, "AddIn.OPI_SQLite.Main");
Закрытие = OPI_SQLite.ЗакрытьПодключение(БазаНаДиске); Закрытие = OPI_SQLite.ЗакрытьСоединение(БазаНаДиске);
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");
КонецПопытки
КонецПроцедуры
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти