mirror of
https://github.com/alm494/sql_proxy.git
synced 2026-06-19 21:44:31 +02:00
added examples for blob
This commit is contained in:
1 parent
b12d5f2383
commit
1bbe31bbc2
1 file changed
+159
-83
+159
-83
@@ -5,22 +5,22 @@
|
||||
// GUID соединения - Строка
|
||||
Функция СоздатьSQLСоединение() Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/connection";
|
||||
json_body = СериализоватьВJSON(
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/connection";
|
||||
ТелоJSON = СериализоватьВJSON(
|
||||
Новый Структура(
|
||||
"host,port,user,password,db_type,db_name,ssl",
|
||||
"127.0.0.1", 5432, "postgres", "postgres", "postgres", "test", Ложь
|
||||
));
|
||||
)); // перепишите под себя, чтобы не хранить пароли в тексте программы
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Content-Type", "application/json;charset=UTF-8");
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
query.УстановитьТелоИзСтроки(json_body);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоJSON);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("POST", query);
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
SQLСоединение = Ответ.ПолучитьТелоКакСтроку();
|
||||
Если КодРезультата = 200 Тогда
|
||||
@@ -34,25 +34,26 @@
|
||||
// Закрывает и удаляет соединение с SQL-сервером
|
||||
// Параметры:
|
||||
// SQLСоединение - Строка - GUID открытого соединения
|
||||
Процедура УдалитьSQLСоединение(SQLСоединение) Экспорт
|
||||
Функция УдалитьSQLСоединение(SQLСоединение) Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/connection";
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/connection";
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Connection-Id", SQLСоединение);
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", SQLСоединение);
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("DELETE", query);
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("DELETE", HTTPЗапрос);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
Результат = Ответ.ПолучитьТелоКакСтроку();
|
||||
Если КодРезультата = 200 Тогда
|
||||
SQLСоединение = "";
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
Возврат КодРезультата;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Выполняет обычные SQL-запросы вида выборки таблиц
|
||||
// Параметры:
|
||||
@@ -62,18 +63,18 @@
|
||||
// Результат запроса - Структура, содержащая массив структур - результат выборки запроса
|
||||
Функция ЗапросВыборкаДанных(SQLСоединение, SQLЗапрос) Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/query";
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/HTTPЗапрос";
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Connection-Id", SQLСоединение);
|
||||
headers.Вставить("Content-Type", "text/plain;charset=UTF-8");
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", SQLСоединение);
|
||||
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
query.УстановитьТелоИзСтроки(SQLЗапрос);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("POST", query);
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
Если КодРезультата = 200 Тогда
|
||||
Возврат ДесериализоватьИзJSON(Ответ.ПолучитьТелоКакСтроку());
|
||||
@@ -87,23 +88,23 @@
|
||||
// Параметры:
|
||||
// SQLСоединение - Строка - GUID открытого соединения
|
||||
// SQLЗапрос - Строка - Текст SQL-запроса
|
||||
Процедура ЗапросИзменениеДанных(SQLСоединение, SQLЗапрос) Экспорт
|
||||
Функция ЗапросИзменениеДанных(SQLСоединение, SQLЗапрос) Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/query";
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/HTTPЗапрос";
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Connection-Id", SQLСоединение);
|
||||
headers.Вставить("Content-Type", "text/plain;charset=UTF-8");
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", SQLСоединение);
|
||||
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
query.УстановитьТелоИзСтроки(SQLЗапрос);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("PUT", query);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);
|
||||
Возврат Ответ.КодСостояния;
|
||||
|
||||
КонецПроцедуры
|
||||
КонецФункции
|
||||
|
||||
// Создает подготовленный оператор (Prepared statement)
|
||||
// Параметры:
|
||||
@@ -113,18 +114,18 @@
|
||||
// GUID оператора - Строка
|
||||
Функция СоздатьПодготовленныйОператор(SQLСоединение, SQLЗапрос) Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/prepared";
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/prepared";
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Connection-Id", Соединение);
|
||||
headers.Вставить("Content-Type", "text/plain;charset=UTF-8");
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", Соединение);
|
||||
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
query.УстановитьТелоИзСтроки(SQLЗапрос);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("POST", query);
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
Результат = Ответ.ПолучитьТелоКакСтроку();
|
||||
Если КодРезультата = 200 Тогда
|
||||
@@ -139,22 +140,22 @@
|
||||
// Параметры:
|
||||
// SQLСоединение - Строка - GUID открытого соединения
|
||||
// SQLОператор - Строка - GUID оператора
|
||||
Процедура УдалитьПодготовленныйОператор(SQLСоединение, SQLОператор) Экспорт
|
||||
Функция УдалитьПодготовленныйОператор(SQLСоединение, SQLОператор) Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/prepared";
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/prepared";
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Connection-Id", SQLСоединение);
|
||||
headers.Вставить("Statement-Id", SQLОператор);
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", SQLСоединение);
|
||||
Заголовки.Вставить("Statement-Id", SQLОператор);
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("DELETE", query);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("DELETE", HTTPЗапрос);
|
||||
Возврат Ответ.КодСостояния;
|
||||
|
||||
КонецПроцедуры
|
||||
КонецФункции
|
||||
|
||||
// Выполнить подготовленный оператор (Prepared statement) с выборкой данных
|
||||
// Параметры:
|
||||
@@ -165,21 +166,21 @@
|
||||
// Результат запроса - Структура, содержащая массив структур - результат выборки запроса
|
||||
Функция ВыполнитьПодготовленныйОператорВыборка(SQLСоединение, SQLОператор, Парам) Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/prepared/query";
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/prepared/HTTPЗапрос";
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Connection-Id", Соединение);
|
||||
headers.Вставить("Statement-Id", Оператор);
|
||||
headers.Вставить("Content-Type", "application/json;charset=UTF-8");
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", Соединение);
|
||||
Заголовки.Вставить("Statement-Id", Оператор);
|
||||
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
|
||||
|
||||
ПараметрыJSON = СериализоватьВJSON(Парам);
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
query.УстановитьТелоИзСтроки(ПараметрыJSON);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыJSON);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("POST", query);
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
|
||||
Если КодРезультата = 200 Тогда
|
||||
@@ -195,26 +196,101 @@
|
||||
// SQLСоединение - Строка - GUID открытого соединения
|
||||
// SQLОператор - Строка - GUID оператора
|
||||
// Парам - Массив - Параметры для подготовленного оператора
|
||||
Процедура ВыполнитьПодготовленныйОператорИзменение(SQLСоединение, SQLОператор, Парам) Экспорт
|
||||
Функция ВыполнитьПодготовленныйОператорИзменение(SQLСоединение, SQLОператор, Парам) Экспорт
|
||||
|
||||
http = Новый HTTPСоединение("localhost", 8080);
|
||||
path = "/api/v1/prepared/query";
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/prepared/HTTPЗапрос";
|
||||
|
||||
headers = Новый Соответствие;
|
||||
headers.Вставить("API-Version", "1.2");
|
||||
headers.Вставить("Connection-Id", Соединение);
|
||||
headers.Вставить("Statement-Id", Оператор);
|
||||
headers.Вставить("Content-Type", "application/json;charset=UTF-8");
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", Соединение);
|
||||
Заголовки.Вставить("Statement-Id", Оператор);
|
||||
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
|
||||
|
||||
ПараметрыJSON = СериализоватьВJSON(Парам);
|
||||
|
||||
query = Новый HTTPЗапрос(path, headers);
|
||||
query.УстановитьТелоИзСтроки(ПараметрыJSON);
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыJSON);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("PUT", query);
|
||||
Ответ = HTTPСоединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);
|
||||
Возврат Ответ.КодСостояния;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Прочитать поле BLOB из таблицы
|
||||
// Параметры:
|
||||
// SQLСоединение - Строка - GUID открытого соединения
|
||||
// SQLЗапрос - Строка - Текст SQL-запроса, содержащий выборку *одного*
|
||||
// поля бинарного типа BYTEA, BLOB, IMAGE и т.д.
|
||||
//
|
||||
Функция ПрочитатьBlob(SQLСоединение, SQLЗапрос) Экспорт
|
||||
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/blob";
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", HTTPСоединение);
|
||||
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
|
||||
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("POST", HTTPЗапрос);
|
||||
КодРезультата = Ответ.КодСостояния;
|
||||
Если КодРезультата = 200 Тогда
|
||||
Возврат ПоместитьВоВременноеХранилище(Ответ.ПолучитьТелоКакДвоичныеДанные(), Новый УникальныйИдентификатор());
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
КонецФункции
|
||||
|
||||
// Записать поле BLOB в таблицу
|
||||
// Параметры:
|
||||
// SQLСоединение - Строка - GUID открытого соединения
|
||||
// SQLЗапрос - Строка - Текст SQL-запроса, содержащий инструкции INSERT или UPDATE
|
||||
// и *один* параметр указывающий на значение бинарного типа BYTEA, BLOB,
|
||||
// IMAGE и т.д.
|
||||
// Адрес - Строка - Адрес временного хранилища, содержащий двоичные данные
|
||||
//
|
||||
Функция ЗаписатьBlob(SQLСоединение, SQLЗапрос, Адрес) Экспорт
|
||||
|
||||
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
|
||||
Путь = "/api/v1/blob";
|
||||
|
||||
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("API-Version", "1.2");
|
||||
Заголовки.Вставить("Connection-Id", HTTPСоединение);
|
||||
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
|
||||
|
||||
Поток = Новый ПотокВПамяти;
|
||||
Запись = Новый ЗаписьДанных(Поток,,, Символы.ВК + Символы.ПС, "");
|
||||
Запись.ЗаписатьСтроку("--" + Разделитель);
|
||||
Запись.ЗаписатьСтроку("Content-Disposition: form-data; name=sql_query;");
|
||||
|
||||
Запись.ЗаписатьСтроку("Content-Type: text/html");
|
||||
Запись.ЗаписатьСтроку("");
|
||||
Запись.ЗаписатьСтроку(Запрос);
|
||||
Запись.ЗаписатьСтроку("--" + Разделитель);
|
||||
Запись.ЗаписатьСтроку("Content-Disposition: form-data; name=binary_data;filename=blob_data");
|
||||
Запись.ЗаписатьСтроку("Content-Type: application/octet-stream");
|
||||
Запись.ЗаписатьСтроку("");
|
||||
Запись.Записать(ПолучитьИзВременногоХранилища(Адрес));
|
||||
Запись.ЗаписатьСтроку("");
|
||||
Запись.ЗаписатьСтроку("--" + Разделитель + "--");
|
||||
Запись.ЗаписатьСтроку("");
|
||||
Запись.Закрыть();
|
||||
|
||||
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
|
||||
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Поток.ЗакрытьИПолучитьДвоичныеДанные());
|
||||
|
||||
Ответ = http.ВызватьHTTPМетод("PUT", HTTPЗапрос);
|
||||
Возврат Ответ.КодСостояния;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
Reference in new issue
Block a user