1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-06-06 23:46:28 +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 addin1c::{name, Variant};
use crate::core::getset; use crate::core::getset;
use rusqlite::{Connection}; use rusqlite::{Connection};
use serde_json::json;
// МЕТОДЫ КОМПОНЕНТЫ ------------------------------------------------------------------------------- // МЕТОДЫ КОМПОНЕНТЫ -------------------------------------------------------------------------------
// Синонимы // Синонимы
pub const METHODS: &[&[u16]] = &[ pub const METHODS: &[&[u16]] = &[
name!("Connect"), name!("Connect"),
name!("Close"),
name!("Execute"), name!("Execute"),
]; ];
@ -17,7 +19,8 @@ pub const METHODS: &[&[u16]] = &[
pub fn get_params_amount(num: usize) -> usize { pub fn get_params_amount(num: usize) -> usize {
match num { match num {
0 => 0, 0 => 0,
1 => 2, 1 => 0,
2 => 2,
_ => 0, _ => 0,
} }
} }
@ -28,11 +31,9 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
match num { match num {
0 =>{ 0 => Box::new(obj.initialize()),
Box::new(obj.initialize()) 1 => Box::new(obj.close_connection()),
}, 2 => {
1 => {
let query = params[0].get_string().unwrap_or("".to_string()); let query = params[0].get_string().unwrap_or("".to_string());
let params_json = params[1].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() 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 { pub fn get_field_ptr(&self, index: usize) -> *const dyn getset::ValueType {
match index { match index {
0 => &self.connection_string as &dyn getset::ValueType as *const _, 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
// Выполняет произвольный SQL запрос // Выполняет произвольный SQL запрос
// //
@ -84,12 +109,14 @@
// ТекстЗапроса - Строка - Текст запроса к базе - sql // ТекстЗапроса - Строка - Текст запроса к базе - sql
// Параметры - Массив Из Произвольный - Массив позиционных параметров запроса - params // Параметры - Массив Из Произвольный - Массив позиционных параметров запроса - params
// ФорсироватьРезультат - Булево - Включает попытку получения результата, даже для не SELECT запросов - force // ФорсироватьРезультат - Булево - Включает попытку получения результата, даже для не SELECT запросов - force
// Соединение - Строка - Существующее соединение или путь к базе. In memory, если не заполнено - db // Соединение - Строка, Произвольный - Существующее соединение или путь к базе. In memory, если не заполнено - db
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура Из КлючИЗначение - Результат выполнения запроса // Структура Из КлючИЗначение - Результат выполнения запроса
Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса, Знач Параметры = "", Знач ФорсироватьРезультат = Ложь, Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса
Знач Соединение = "") Экспорт , Знач Параметры = ""
, Знач ФорсироватьРезультат = Ложь
, Знач Соединение = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса); 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); Разделы.Вставить("VK" , 5);
Разделы.Вставить("Viber" , 5); Разделы.Вставить("Viber" , 5);
Разделы.Вставить("Twitter" , 4); Разделы.Вставить("Twitter" , 4);
Разделы.Вставить("SQLite" , 5);
Разделы.Вставить("YandexDisk" , 5); Разделы.Вставить("YandexDisk" , 5);
Разделы.Вставить("GoogleWorkspace", 2); Разделы.Вставить("GoogleWorkspace", 2);
Разделы.Вставить("GoogleCalendar" , 5); Разделы.Вставить("GoogleCalendar" , 5);
@ -85,6 +86,7 @@
Разделы.Вставить("VK" , СтандартныеЗависимости); Разделы.Вставить("VK" , СтандартныеЗависимости);
Разделы.Вставить("Viber" , СтандартныеЗависимости); Разделы.Вставить("Viber" , СтандартныеЗависимости);
Разделы.Вставить("Twitter" , СтандартныеЗависимости); Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("SQLite" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости); Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости); Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл); Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
@ -130,6 +132,7 @@
Метрика = "YandexMetrika"; Метрика = "YandexMetrika";
S3_ = "S3"; S3_ = "S3";
TCP = "TCP"; TCP = "TCP";
SQLite = "SQLite";
ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод"); ТаблицаТестов.Колонки.Добавить("Метод");
@ -264,6 +267,7 @@
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_); НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_); НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
НовыйТест(ТаблицаТестов, "TC_Клиент" , "TCP Клиент" , TCP); НовыйТест(ТаблицаТестов, "TC_Клиент" , "TCP Клиент" , TCP);
НовыйТест(ТаблицаТестов, "SQLL_ОсновныеМетоды" , "Основные методы" , SQLite);
Возврат ТаблицаТестов; Возврат ТаблицаТестов;
@ -2058,6 +2062,14 @@
КонецПроцедуры КонецПроцедуры
Процедура Проверка_Компонента(Знач Результат, Знач ИмяТипа) Экспорт
ОжидаетЧто(Строка(ТипЗнч(Результат))).Равно(ИмяТипа);
КонецПроцедуры
Процедура Проверка_SQLiteУспех(Знач Результат) Экспорт
ОжидаетЧто(Результат["result"]).Равно(Истина);
КонецПроцедуры
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти

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
@ -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
// Выполняет произвольный SQL запрос // Выполняет произвольный SQL запрос
// //
@ -84,12 +109,14 @@
// ТекстЗапроса - Строка - Текст запроса к базе - sql // ТекстЗапроса - Строка - Текст запроса к базе - sql
// Параметры - Массив Из Произвольный - Массив позиционных параметров запроса - params // Параметры - Массив Из Произвольный - Массив позиционных параметров запроса - params
// ФорсироватьРезультат - Булево - Включает попытку получения результата, даже для не SELECT запросов - force // ФорсироватьРезультат - Булево - Включает попытку получения результата, даже для не SELECT запросов - force
// Соединение - Строка - Существующее соединение или путь к базе. In memory, если не заполнено - db // Соединение - Строка, Произвольный - Существующее соединение или путь к базе. In memory, если не заполнено - db
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура Из КлючИЗначение - Результат выполнения запроса // Структура Из КлючИЗначение - Результат выполнения запроса
Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса, Знач Параметры = "", Знач ФорсироватьРезультат = Ложь, Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса
Знач Соединение = "") Экспорт , Знач Параметры = ""
, Знач ФорсироватьРезультат = Ложь
, Знач Соединение = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса); OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстЗапроса);
@ -220,4 +247,10 @@
КонецФункции КонецФункции
Функция ЭтоКоннектор(Знач Значение)
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_SQLite.Main";
КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -211,18 +211,34 @@
Функция СформироватьТекстSelect(Знач Схема) Функция СформироватьТекстSelect(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции КонецФункции
Функция СформироватьТекстInsert(Знач Схема) Функция СформироватьТекстInsert(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции КонецФункции
Функция СформироватьТекстUpdate(Знач Схема) Функция СформироватьТекстUpdate(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции КонецФункции
Функция СформироватьТекстDelete(Знач Схема) Функция СформироватьТекстDelete(Знач Схема)
ТекстSQL = "";
Возврат ТекстSQL;
КонецФункции КонецФункции
Функция СформироватьТекстCreate(Знач Схема) Функция СформироватьТекст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 // MIT License
@ -53,6 +53,7 @@
Разделы.Вставить("VK" , 5); Разделы.Вставить("VK" , 5);
Разделы.Вставить("Viber" , 5); Разделы.Вставить("Viber" , 5);
Разделы.Вставить("Twitter" , 4); Разделы.Вставить("Twitter" , 4);
Разделы.Вставить("SQLite" , 5);
Разделы.Вставить("YandexDisk" , 5); Разделы.Вставить("YandexDisk" , 5);
Разделы.Вставить("GoogleWorkspace", 2); Разделы.Вставить("GoogleWorkspace", 2);
Разделы.Вставить("GoogleCalendar" , 5); Разделы.Вставить("GoogleCalendar" , 5);
@ -85,6 +86,7 @@
Разделы.Вставить("VK" , СтандартныеЗависимости); Разделы.Вставить("VK" , СтандартныеЗависимости);
Разделы.Вставить("Viber" , СтандартныеЗависимости); Разделы.Вставить("Viber" , СтандартныеЗависимости);
Разделы.Вставить("Twitter" , СтандартныеЗависимости); Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("SQLite" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости); Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости); Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл); Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
@ -130,6 +132,7 @@
Метрика = "YandexMetrika"; Метрика = "YandexMetrika";
S3_ = "S3"; S3_ = "S3";
TCP = "TCP"; TCP = "TCP";
SQLite = "SQLite";
ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод"); ТаблицаТестов.Колонки.Добавить("Метод");
@ -264,6 +267,7 @@
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_); НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_); НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
НовыйТест(ТаблицаТестов, "TC_Клиент" , "TCP Клиент" , TCP); НовыйТест(ТаблицаТестов, "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 // 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");
КонецПопытки
КонецПроцедуры
#КонецОбласти
#КонецОбласти #КонецОбласти
#КонецОбласти #КонецОбласти