1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-05-31 23:20:02 +02:00

SQLite: Закрытие соединения и начало тестов

This commit is contained in:
Anton Titovets 2024-12-29 22:23:41 +03:00
parent f67675686d
commit 4ddfb35e2d
13 changed files with 6218 additions and 5989 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3,12 +3,14 @@ mod methods;
use addin1c::{name, Variant};
use crate::core::getset;
use rusqlite::{Connection};
use serde_json::json;
// МЕТОДЫ КОМПОНЕНТЫ -------------------------------------------------------------------------------
// Синонимы
pub const METHODS: &[&[u16]] = &[
name!("Connect"),
name!("Close"),
name!("Execute"),
];
@ -17,7 +19,8 @@ pub const METHODS: &[&[u16]] = &[
pub fn get_params_amount(num: usize) -> usize {
match num {
0 => 0,
1 => 2,
1 => 0,
2 => 2,
_ => 0,
}
}
@ -28,11 +31,9 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
match num {
0 =>{
Box::new(obj.initialize())
},
1 => {
0 => Box::new(obj.initialize()),
1 => Box::new(obj.close_connection()),
2 => {
let query = params[0].get_string().unwrap_or("".to_string());
let params_json = params[1].get_string().unwrap_or("".to_string());
@ -91,6 +92,23 @@ impl AddIn {
self.connection.as_ref()
}
pub fn close_connection(&mut self) -> String {
if let Some(conn) = self.connection.take() {
match conn.close() {
Ok(_) => json!({"result": true}).to_string(),
Err((_conn, err)) => json!({
"result": false,
"error": err.to_string()
}).to_string(),
}
} else {
json!({
"result": false,
"error": "Connection already closed"
}).to_string()
}
}
pub fn get_field_ptr(&self, index: usize) -> *const dyn getset::ValueType {
match index {
0 => &self.connection_string as &dyn getset::ValueType as *const _,

Binary file not shown.

Binary file not shown.

View File

@ -55,7 +55,7 @@
// Произвольный - Объект коннектора или структура с информацией об ошибке
Функция СоздатьПодключение(Знач База = "") Экспорт
Если Строка(ТипЗнч(База)) = "AddIn.OPI_SQLite.Main" Тогда
Если ЭтоКоннектор(База) Тогда
Возврат База;
КонецЕсли;
@ -72,6 +72,31 @@
КонецФункции
// Закрыть подключение !NOCLI
// Явно закрывает переданное соединение
//
// Параметры:
// Соединение - Произвольный - Объект компоненты с открытым соединением - db
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат закрытия соединения
Функция ЗакрытьПодключение(Знач Соединение) Экспорт
Если ЭтоКоннектор(Соединение) Тогда
Результат = Соединение.Close();
Результат = OPI_Инструменты.JsonВСтруктуру(Результат, Ложь);
Иначе
Результат = Новый Структура("result,error", Ложь, "It's not a connection");
КонецЕсли;
Возврат Результат;
КонецФункции
// Выполнить запрос SQL
// Выполняет произвольный SQL запрос
//
@ -84,12 +109,14 @@
// ТекстЗапроса - Строка - Текст запроса к базе - sql
// Параметры - Массив Из Произвольный - Массив позиционных параметров запроса - params
// ФорсироватьРезультат - Булево - Включает попытку получения результата, даже для не SELECT запросов - force
// Соединение - Строка - Существующее соединение или путь к базе. In memory, если не заполнено - db
// Соединение - Строка, Произвольный - Существующее соединение или путь к базе. In memory, если не заполнено - db
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат выполнения запроса
Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса, Знач Параметры = "", Знач ФорсироватьРезультат = Ложь,
Знач Соединение = "") Экспорт
Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса
, Знач Параметры = ""
, Знач ФорсироватьРезультат = Ложь
, Знач Соединение = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса);
@ -220,4 +247,10 @@
КонецФункции
Функция ЭтоКоннектор(Знач Значение)
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_SQLite.Main";
КонецФункции
#КонецОбласти

View File

@ -2212,6 +2212,18 @@
#КонецОбласти
#Область SQLite
Процедура SQLL_ОсновныеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
SQLite_СоздатьПодключение(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@ -16051,6 +16063,38 @@
#КонецОбласти
#Область SQLite
Процедура SQLite_СоздатьПодключение(ПараметрыФункции)
ИВФ = ПолучитьИмяВременногоФайла("sqlite");
БазаНаДиске = OPI_SQLite.СоздатьПодключение(ИВФ);
БазаВПамяти = OPI_SQLite.СоздатьПодключение();
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(БазаНаДиске, "СоздатьПодключение", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(БазаНаДиске, "AddIn.OPI_SQLite.Main");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(БазаВПамяти, "СоздатьПодключение (im)", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(БазаВПамяти, "AddIn.OPI_SQLite.Main");
Закрытие = OPI_SQLite.ЗакрытьПодключение(БазаНаДиске);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Закрытие, "ЗакрытьПодключение", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Закрытие);
Попытка
УдалитьФайлы(ИВФ);
Исключение
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла базы", "SQLite");
КонецПопытки
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти

View File

@ -53,6 +53,7 @@
Разделы.Вставить("VK" , 5);
Разделы.Вставить("Viber" , 5);
Разделы.Вставить("Twitter" , 4);
Разделы.Вставить("SQLite" , 5);
Разделы.Вставить("YandexDisk" , 5);
Разделы.Вставить("GoogleWorkspace", 2);
Разделы.Вставить("GoogleCalendar" , 5);
@ -85,6 +86,7 @@
Разделы.Вставить("VK" , СтандартныеЗависимости);
Разделы.Вставить("Viber" , СтандартныеЗависимости);
Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("SQLite" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
@ -130,6 +132,7 @@
Метрика = "YandexMetrika";
S3_ = "S3";
TCP = "TCP";
SQLite = "SQLite";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@ -264,6 +267,7 @@
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
НовыйТест(ТаблицаТестов, "TC_Клиент" , "TCP Клиент" , TCP);
НовыйТест(ТаблицаТестов, "SQLL_ОсновныеМетоды" , "Основные методы" , SQLite);
Возврат ТаблицаТестов;
@ -2058,6 +2062,14 @@
КонецПроцедуры
Процедура Проверка_Компонента(Знач Результат, Знач ИмяТипа) Экспорт
ОжидаетЧто(Строка(ТипЗнч(Результат))).Равно(ИмяТипа);
КонецПроцедуры
Процедура Проверка_SQLiteУспех(Знач Результат) Экспорт
ОжидаетЧто(Результат["result"]).Равно(Истина);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -2094,9 +2106,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_SQLite.os
// OneScript: ./OInt/core/Modules/OPI_SQLite.os
// Lib: SQLite
// CLI: sqlite
@ -55,7 +55,7 @@
// Произвольный - Объект коннектора или структура с информацией об ошибке
Функция СоздатьПодключение(Знач База = "") Экспорт
Если Строка(ТипЗнч(База)) = "AddIn.OPI_SQLite.Main" Тогда
Если ЭтоКоннектор(База) Тогда
Возврат База;
КонецЕсли;
@ -72,6 +72,31 @@
КонецФункции
// Закрыть подключение !NOCLI
// Явно закрывает переданное соединение
//
// Параметры:
// Соединение - Произвольный - Объект компоненты с открытым соединением - db
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат закрытия соединения
Функция ЗакрытьПодключение(Знач Соединение) Экспорт
Если ЭтоКоннектор(Соединение) Тогда
Результат = Соединение.Close();
Результат = OPI_Инструменты.JsonВСтруктуру(Результат, Ложь);
Иначе
Результат = Новый Структура("result,error", Ложь, "It's not a connection");
КонецЕсли;
Возврат Результат;
КонецФункции
// Выполнить запрос SQL
// Выполняет произвольный SQL запрос
//
@ -84,12 +109,14 @@
// ТекстЗапроса - Строка - Текст запроса к базе - sql
// Параметры - Массив Из Произвольный - Массив позиционных параметров запроса - params
// ФорсироватьРезультат - Булево - Включает попытку получения результата, даже для не SELECT запросов - force
// Соединение - Строка - Существующее соединение или путь к базе. In memory, если не заполнено - db
// Соединение - Строка, Произвольный - Существующее соединение или путь к базе. In memory, если не заполнено - db
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат выполнения запроса
Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса, Знач Параметры = "", Знач ФорсироватьРезультат = Ложь,
Знач Соединение = "") Экспорт
Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса
, Знач Параметры = ""
, Знач ФорсироватьРезультат = Ложь
, Знач Соединение = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса);
@ -220,4 +247,10 @@
КонецФункции
Функция ЭтоКоннектор(Знач Значение)
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_SQLite.Main";
КонецФункции
#КонецОбласти

View File

@ -210,19 +210,35 @@
#Область Процессоры
Функция СформироватьТекстSelect(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции
Функция СформироватьТекстInsert(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции
Функция СформироватьТекстUpdate(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции
Функция СформироватьТекстDelete(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции
Функция СформироватьТекстCreate(Знач Схема)
@ -246,7 +262,9 @@
ОписанияКолонок = СтрСоединить(МассивОписанийКолонок, "," + Символы.ПС);
ТекстSQL = СтрШаблон(ШаблонSQL, )
ТекстSQL = СтрШаблон(ШаблонSQL, Таблица, ОписанияКолонок);
Возврат ТекстSQL;
КонецФункции
@ -255,7 +273,7 @@
Процедура ПроверитьОбязательныеПоляСхемы(Схема, Знач Поля)
МассивОбязательныхПолей = СтрСоединить(Поля, ",");
МассивОтсутствующих = OPI_Инструменты.НайтиОтсутствующиеПоляКоллекции(МассивОбязательныхПолей);
МассивОтсутствующих = OPI_Инструменты.НайтиОтсутствующиеПоляКоллекции(Схема, МассивОбязательныхПолей);
Если ЗначениеЗаполнено(МассивОтсутствующих) Тогда
ВызватьИсключение "Отсутствуют необходимые поля схемы: " + СтрСоединить(МассивОтсутствующих, ", ");

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// MIT License
@ -53,6 +53,7 @@
Разделы.Вставить("VK" , 5);
Разделы.Вставить("Viber" , 5);
Разделы.Вставить("Twitter" , 4);
Разделы.Вставить("SQLite" , 5);
Разделы.Вставить("YandexDisk" , 5);
Разделы.Вставить("GoogleWorkspace", 2);
Разделы.Вставить("GoogleCalendar" , 5);
@ -85,6 +86,7 @@
Разделы.Вставить("VK" , СтандартныеЗависимости);
Разделы.Вставить("Viber" , СтандартныеЗависимости);
Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("SQLite" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
@ -130,6 +132,7 @@
Метрика = "YandexMetrika";
S3_ = "S3";
TCP = "TCP";
SQLite = "SQLite";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@ -264,6 +267,7 @@
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
НовыйТест(ТаблицаТестов, "TC_Клиент" , "TCP Клиент" , TCP);
НовыйТест(ТаблицаТестов, "SQLL_ОсновныеМетоды" , "Основные методы" , SQLite);
Возврат ТаблицаТестов;
@ -2058,6 +2062,14 @@
КонецПроцедуры
Процедура Проверка_Компонента(Знач Результат, Знач ИмяТипа) Экспорт
ОжидаетЧто(Строка(ТипЗнч(Результат))).Равно(ИмяТипа);
КонецПроцедуры
Процедура Проверка_SQLiteУспех(Знач Результат) Экспорт
ОжидаетЧто(Результат["result"]).Равно(Истина);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License
@ -2212,6 +2212,18 @@
#КонецОбласти
#Область SQLite
Процедура SQLL_ОсновныеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
SQLite_СоздатьПодключение(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@ -16051,6 +16063,38 @@
#КонецОбласти
#Область SQLite
Процедура SQLite_СоздатьПодключение(ПараметрыФункции)
ИВФ = ПолучитьИмяВременногоФайла("sqlite");
БазаНаДиске = OPI_SQLite.СоздатьПодключение(ИВФ);
БазаВПамяти = OPI_SQLite.СоздатьПодключение();
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(БазаНаДиске, "СоздатьПодключение", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(БазаНаДиске, "AddIn.OPI_SQLite.Main");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(БазаВПамяти, "СоздатьПодключение (im)", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(БазаВПамяти, "AddIn.OPI_SQLite.Main");
Закрытие = OPI_SQLite.ЗакрытьПодключение(БазаНаДиске);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Закрытие, "ЗакрытьПодключение", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Закрытие);
Попытка
УдалитьФайлы(ИВФ);
Исключение
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла базы", "SQLite");
КонецПопытки
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти