You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-08-10 22:41:43 +02:00
Доработки SQLite
This commit is contained in:
@@ -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"
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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.
Binary file not shown.
@@ -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ВСтруктуру(Результат, Ложь);
|
||||||
|
|
||||||
|
@@ -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");
|
||||||
|
КонецПопытки
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
Binary file not shown.
Reference in New Issue
Block a user