1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-03-29 21:57:16 +02:00

Доработка обработки ошибок вк SQLite

This commit is contained in:
Anton Titovets 2025-01-03 10:53:07 +03:00
parent 421ec0111e
commit 27e184866d
13 changed files with 6299 additions and 6155 deletions

View File

@ -72,7 +72,7 @@
СоздатьCFE(Локализация);
СоздатьEDT(Локализация);
СоздатьOSPX(Локализация);
СоздатьEXE(Локализация);
//СоздатьEXE(Локализация);
СоздатьПакеты(Локализация);
СоздатьУстановщик(Локализация);

File diff suppressed because it is too large Load Diff

View File

@ -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(&params_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()
}

Binary file not shown.

Binary file not shown.

View File

@ -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"], Ложь));
КонецЦикла;

View File

@ -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Успех(Результат);
КонецПроцедуры

View File

@ -2075,6 +2075,14 @@
ОжидаетЧто(Результат["result"]).Равно(Истина);
КонецПроцедуры
Процедура Проверка_SQLiteОшибка(Знач Результат) Экспорт
ОжидаетЧто(Результат["result"]).Равно(Ложь);
КонецПроцедуры
Процедура Проверка_SQLiteСтроки(Знач Результат, Знач Количество) Экспорт
ОжидаетЧто(Результат["rows"]).Равно(Количество);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -2111,9 +2119,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@ -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"], Ложь));
КонецЦикла;

View File

@ -2075,6 +2075,14 @@
ОжидаетЧто(Результат["result"]).Равно(Истина);
КонецПроцедуры
Процедура Проверка_SQLiteОшибка(Знач Результат) Экспорт
ОжидаетЧто(Результат["result"]).Равно(Ложь);
КонецПроцедуры
Процедура Проверка_SQLiteСтроки(Знач Результат, Знач Количество) Экспорт
ОжидаетЧто(Результат["rows"]).Равно(Количество);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -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Успех(Результат);
КонецПроцедуры