mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-03-29 21:57:16 +02:00
Доработка обработки ошибок вк SQLite
This commit is contained in:
parent
421ec0111e
commit
27e184866d
2
ci/os/releasemaker.os
vendored
2
ci/os/releasemaker.os
vendored
@ -72,7 +72,7 @@
|
||||
СоздатьCFE(Локализация);
|
||||
СоздатьEDT(Локализация);
|
||||
СоздатьOSPX(Локализация);
|
||||
СоздатьEXE(Локализация);
|
||||
//СоздатьEXE(Локализация);
|
||||
СоздатьПакеты(Локализация);
|
||||
СоздатьУстановщик(Локализация);
|
||||
|
||||
|
12226
service/dictionaries/en.json
vendored
12226
service/dictionaries/en.json
vendored
File diff suppressed because it is too large
Load Diff
@ -14,25 +14,18 @@ pub fn execute_query(
|
||||
|
||||
let conn = match client.get_connection() {
|
||||
Some(c) => c,
|
||||
None => return r#"{"result": false, "error": "No connection initialized"}"#.to_string(),
|
||||
None => return format_json_error("No connection initialized"),
|
||||
};
|
||||
|
||||
// Парсинг JSON параметров
|
||||
let mut parsed_params: Value = match serde_json::from_str(¶ms_json) {
|
||||
Ok(params) => params,
|
||||
Err(e) => {
|
||||
return format!(
|
||||
r#"{{"result": false, "error": "Invalid JSON parameters: {}"}}"#,
|
||||
e.to_string()
|
||||
);
|
||||
}
|
||||
Err(e) => return format_json_error(e)
|
||||
};
|
||||
|
||||
let params_array = match parsed_params.as_array_mut() {
|
||||
Some(array) => array,
|
||||
None => {
|
||||
return r#"{"result": false, "error": "Parameters must be a JSON array"}"#.to_string();
|
||||
}
|
||||
None => return format_json_error("Parameters must be a JSON array")
|
||||
};
|
||||
|
||||
let convert = process_blobs(params_array);
|
||||
@ -52,24 +45,18 @@ pub fn execute_query(
|
||||
let res = query_result.query(convert);
|
||||
|
||||
match res{
|
||||
Ok(mut rows) => {
|
||||
rows_to_json_array(&mut rows, &cols)
|
||||
}
|
||||
Err(e) => {
|
||||
format!(r#"{{"result": false, "error": "{}"}}"#, e.to_string())
|
||||
}
|
||||
Ok(mut rows) => rows_to_json_array(&mut rows, &cols),
|
||||
Err(e) => format_json_error(e)
|
||||
}
|
||||
|
||||
}
|
||||
Err(e) => {
|
||||
format!(r#"{{"result": false, "error": "{}"}}"#, e.to_string())
|
||||
}
|
||||
Err(e) => format_json_error(e)
|
||||
}
|
||||
} else {
|
||||
|
||||
match conn.execute(&query, convert) {
|
||||
Ok(_) => r#"{"result": true}"#.to_string(),
|
||||
Err(e) => format!(r#"{{"result": false, "error": "{}"}}"#, e.to_string()),
|
||||
Err(e) => format_json_error(e),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -169,3 +156,12 @@ fn process_blobs(json_array: &mut Vec<Value>) -> ParamsFromIter<Vec<SqlValue>> {
|
||||
}
|
||||
params_from_iter(result)
|
||||
}
|
||||
|
||||
pub fn format_json_error<E: ToString>(error: E) -> String {
|
||||
let error_message = error.to_string();
|
||||
let json_obj = json!({
|
||||
"result": false,
|
||||
"error": error_message,
|
||||
});
|
||||
json_obj.to_string()
|
||||
}
|
BIN
src/en/OInt/addins/OPI_SQLite.zip
vendored
BIN
src/en/OInt/addins/OPI_SQLite.zip
vendored
Binary file not shown.
Binary file not shown.
BIN
src/ru/OInt/addins/OPI_SQLite.zip
vendored
BIN
src/ru/OInt/addins/OPI_SQLite.zip
vendored
Binary file not shown.
29
src/ru/OInt/core/Modules/OPI_SQLite.os
vendored
29
src/ru/OInt/core/Modules/OPI_SQLite.os
vendored
@ -203,11 +203,13 @@
|
||||
КонецЕсли;
|
||||
|
||||
Если Транзакция Тогда
|
||||
|
||||
Начало = ВыполнитьЗапросSQL("BEGIN TRANSACTION", , , Соединение);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Начало["result"] Тогда
|
||||
Возврат Начало;
|
||||
|
||||
Если Не Начало["result"] Тогда
|
||||
Возврат Начало;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Счетчик = 0;
|
||||
@ -245,10 +247,14 @@
|
||||
Результат = ДобавитьЗапись(Таблица, Запись, Соединение);
|
||||
|
||||
Если Результат["result"] Тогда
|
||||
|
||||
СчетчикУспешных = СчетчикУспешных + 1;
|
||||
|
||||
Иначе
|
||||
|
||||
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"]));
|
||||
Ошибка = Истина;
|
||||
Ошибка = Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
@ -260,10 +266,9 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураРезультата = Новый Структура("result,rows,errors"
|
||||
, МассивОшибок.Количество() = 0
|
||||
, СчетчикУспешных
|
||||
, МассивОшибок);
|
||||
СтруктураРезультата.Вставить("result", МассивОшибок.Количество() = 0);
|
||||
СтруктураРезультата.Вставить("rows" , СчетчикУспешных);
|
||||
СтруктураРезультата.Вставить("errors", МассивОшибок);
|
||||
|
||||
Возврат СтруктураРезультата;
|
||||
|
||||
@ -475,10 +480,10 @@
|
||||
|
||||
OPI_ЗапросыSQL.ДобавитьОтбор(Схема
|
||||
, Фильтр["field"]
|
||||
, Фильтр["type"]
|
||||
, ?(Фильтр.Свойство("type"), Фильтр["type"], "=")
|
||||
, Фильтр["value"]
|
||||
, Фильтр["union"]
|
||||
, Фильтр["raw"]);
|
||||
, ?(Фильтр.Свойство("union"), Фильтр["union"], "AND")
|
||||
, ?(Фильтр.Свойство("raw"), Фильтр["raw"], Ложь));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
56
src/ru/OInt/tests/Modules/internal/OPI_Тесты.os
vendored
56
src/ru/OInt/tests/Modules/internal/OPI_Тесты.os
vendored
@ -16259,7 +16259,16 @@
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
СоответствиеКолонок = Новый Соответствие;
|
||||
СоответствиеКолонок.Вставить("id" , "INTEGER PRIMARY KEY");
|
||||
СоответствиеКолонок.Вставить("[Непонятная колонка]", "TEXT");
|
||||
|
||||
Результат = OPI_SQLite.СоздатьТаблицу("test1", СоответствиеКолонок, , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу (непонятная колонка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура SQLite_ДобавитьЗаписи(ПараметрыФункции)
|
||||
@ -16300,7 +16309,35 @@
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, МассивДанных, Ложь, База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (без транзакции)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
СтруктураСтроки2.Вставить("error", "Lesha") ;
|
||||
МассивДанных.Добавить(СтруктураСтроки2);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, МассивДанных, , База);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (ошибка поля)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteОшибка(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, МассивДанных, Ложь, База);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (ошибка поля без транзакции)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteСтроки(Результат, 1);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, "not valid json", , База);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (ошибка json)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteОшибка(Результат);
|
||||
|
||||
СоответствиеСтроки = Новый Соответствие;
|
||||
СоответствиеСтроки.Вставить("[Непонятная колонка]", "yo");
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи("test1", СоответствиеСтроки, , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (непонятная колонка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
Попытка
|
||||
УдалитьФайлы(ФайлКартинки);
|
||||
Исключение
|
||||
@ -16333,7 +16370,6 @@
|
||||
СтруктураФильтра2.Вставить("field", "age");
|
||||
СтруктураФильтра2.Вставить("type" , "BETWEEN");
|
||||
СтруктураФильтра2.Вставить("value", "20 AND 30");
|
||||
СтруктураФильтра2.Вставить("union", "");
|
||||
СтруктураФильтра2.Вставить("raw" , Истина);
|
||||
|
||||
Фильтры.Добавить(СтруктураФильтра1);
|
||||
@ -16348,6 +16384,24 @@
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, "['name','age','salary','is_active','created_at']", , , , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи (без параметров)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
СтруктураФильтра2.Вставить("type" , "BEETWEEN");
|
||||
Фильтры.Добавить(СтруктураФильтра2);
|
||||
|
||||
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, "['name','age','salary','is_active','created_at']", Фильтры, , , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи (ошибка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteОшибка(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ПолучитьЗаписи("test1", , , , , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи (непонятная колонка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -2075,6 +2075,14 @@
|
||||
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_SQLiteОшибка(Знач Результат) Экспорт
|
||||
ОжидаетЧто(Результат["result"]).Равно(Ложь);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_SQLiteСтроки(Знач Результат, Знач Количество) Экспорт
|
||||
ОжидаетЧто(Результат["rows"]).Равно(Количество);
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
@ -2111,9 +2119,9 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
|
||||
|
||||
Модуль = Вычислить(Имя);
|
||||
|
||||
|
||||
Возврат Модуль;
|
||||
КонецФункции
|
||||
|
||||
|
@ -203,11 +203,13 @@
|
||||
КонецЕсли;
|
||||
|
||||
Если Транзакция Тогда
|
||||
|
||||
Начало = ВыполнитьЗапросSQL("BEGIN TRANSACTION", , , Соединение);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Начало["result"] Тогда
|
||||
Возврат Начало;
|
||||
|
||||
Если Не Начало["result"] Тогда
|
||||
Возврат Начало;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Счетчик = 0;
|
||||
@ -245,10 +247,14 @@
|
||||
Результат = ДобавитьЗапись(Таблица, Запись, Соединение);
|
||||
|
||||
Если Результат["result"] Тогда
|
||||
|
||||
СчетчикУспешных = СчетчикУспешных + 1;
|
||||
|
||||
Иначе
|
||||
|
||||
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"]));
|
||||
Ошибка = Истина;
|
||||
Ошибка = Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
@ -260,10 +266,9 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураРезультата = Новый Структура("result,rows,errors"
|
||||
, МассивОшибок.Количество() = 0
|
||||
, СчетчикУспешных
|
||||
, МассивОшибок);
|
||||
СтруктураРезультата.Вставить("result", МассивОшибок.Количество() = 0);
|
||||
СтруктураРезультата.Вставить("rows" , СчетчикУспешных);
|
||||
СтруктураРезультата.Вставить("errors", МассивОшибок);
|
||||
|
||||
Возврат СтруктураРезультата;
|
||||
|
||||
@ -475,10 +480,10 @@
|
||||
|
||||
OPI_ЗапросыSQL.ДобавитьОтбор(Схема
|
||||
, Фильтр["field"]
|
||||
, Фильтр["type"]
|
||||
, ?(Фильтр.Свойство("type"), Фильтр["type"], "=")
|
||||
, Фильтр["value"]
|
||||
, Фильтр["union"]
|
||||
, Фильтр["raw"]);
|
||||
, ?(Фильтр.Свойство("union"), Фильтр["union"], "AND")
|
||||
, ?(Фильтр.Свойство("raw"), Фильтр["raw"], Ложь));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -2075,6 +2075,14 @@
|
||||
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_SQLiteОшибка(Знач Результат) Экспорт
|
||||
ОжидаетЧто(Результат["result"]).Равно(Ложь);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_SQLiteСтроки(Знач Результат, Знач Количество) Экспорт
|
||||
ОжидаетЧто(Результат["rows"]).Равно(Количество);
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -16259,7 +16259,16 @@
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
СоответствиеКолонок = Новый Соответствие;
|
||||
СоответствиеКолонок.Вставить("id" , "INTEGER PRIMARY KEY");
|
||||
СоответствиеКолонок.Вставить("[Непонятная колонка]", "TEXT");
|
||||
|
||||
Результат = OPI_SQLite.СоздатьТаблицу("test1", СоответствиеКолонок, , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу (непонятная колонка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура SQLite_ДобавитьЗаписи(ПараметрыФункции)
|
||||
@ -16300,7 +16309,35 @@
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, МассивДанных, Ложь, База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (без транзакции)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
СтруктураСтроки2.Вставить("error", "Lesha") ;
|
||||
МассивДанных.Добавить(СтруктураСтроки2);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, МассивДанных, , База);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (ошибка поля)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteОшибка(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, МассивДанных, Ложь, База);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (ошибка поля без транзакции)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteСтроки(Результат, 1);
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(Таблица, "not valid json", , База);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (ошибка json)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteОшибка(Результат);
|
||||
|
||||
СоответствиеСтроки = Новый Соответствие;
|
||||
СоответствиеСтроки.Вставить("[Непонятная колонка]", "yo");
|
||||
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи("test1", СоответствиеСтроки, , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи (непонятная колонка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
Попытка
|
||||
УдалитьФайлы(ФайлКартинки);
|
||||
Исключение
|
||||
@ -16333,7 +16370,6 @@
|
||||
СтруктураФильтра2.Вставить("field", "age");
|
||||
СтруктураФильтра2.Вставить("type" , "BETWEEN");
|
||||
СтруктураФильтра2.Вставить("value", "20 AND 30");
|
||||
СтруктураФильтра2.Вставить("union", "");
|
||||
СтруктураФильтра2.Вставить("raw" , Истина);
|
||||
|
||||
Фильтры.Добавить(СтруктураФильтра1);
|
||||
@ -16348,6 +16384,24 @@
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, "['name','age','salary','is_active','created_at']", , , , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи (без параметров)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
СтруктураФильтра2.Вставить("type" , "BEETWEEN");
|
||||
Фильтры.Добавить(СтруктураФильтра2);
|
||||
|
||||
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, "['name','age','salary','is_active','created_at']", Фильтры, , , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи (ошибка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteОшибка(Результат);
|
||||
|
||||
Результат = OPI_SQLite.ПолучитьЗаписи("test1", , , , , База);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи (непонятная колонка)", "SQLite");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user