Что такое код ifx_create_blob


Содержание

Что такое код ifx_create_blob

(PHP 3 >= 3.0.4, PHP 4, PHP 5)

ifx_create_blob — Creates an blob object

Description int ifx_create_blob ( int type, int mode, string param )

Creates an blob object.

type: 1 = TEXT, 0 = BYTE

mode: 0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

param: if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Return FALSE on error, otherwise the new blob object-id.

Пред. Начало След.
ifx_copy_blob Уровень выше ifx_create_char

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

FPublisher

Web-технологии: База знаний

Документация PHP

ifx_create_blob

(No version information available, might be only in CVS)

ifx_create_blob — Creates an blob object

Описание

int ifx_create_blob ( int $type , int $mode , string $param )

Creates a blob object.

Список параметров

1 = TEXT, 0 = BYTE

0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Возвращаемые значения

Returns the new BLOB object-id, or FALSE on errors.

Смотрите также

Последние поступления:

ТехЗадание на Землю

Размещена 14 марта 2020 года

Пpоект Genesis (из коpпоpативной пеpеписки)

Шпаргалка по работе с Vim

Размещена 05 декабря 2020 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

Ошибка: Error: Cannot find a val >Размещена 13 сентабря 2020 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

Linux Optimization

Размещена 30 июля 2012 года

ifx_create_blob

(PHP 4, PHP ifx_create_blob — Creates an blob object

Описание

Creates a blob object.

Список параметров

1 = TEXT, 0 = BYTE

0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Возвращаемые значения

Returns the new BLOB object-id, or FALSE on errors.

Смотрите также

  • ifx_copy_blob() — Duplicates the given blob object
  • ifx_free_blob() — Deletes the blob object
НОВОСТИ ФОРУМА
Рыцари теории эфира
01.10.2020 — 05:20: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]69vJGqDENq4[/Youtube][/center]
[center]14:36[/center]
Osievskii Global News
29 сент. Отправлено 05:20, 01.10.2020 г.’ target=_top>Просвещение от Вячеслава Осиевского — Карим_Хайдаров.
30.09.2020 — 12:51: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Ok]376309070[/Ok][/center]
[center]11:03[/center] Отправлено 12:51, 30.09.2020 г.’ target=_top>Просвещение от Дэйвида Дюка — Карим_Хайдаров.
30.09.2020 — 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]VVQv1EzDTtY[/Youtube][/center]
[center]10:43[/center]

интервью Раввина Борода https://cursorinfo.co.il/all-news/rav.
мой телеграмм https://t.me/peshekhonovandrei
мой твиттер https://twitter.com/Andrey54708595
мой инстаграм https://www.instagram.com/andreipeshekhonow/

[b]Мой комментарий:
Андрей спрашивает: Краснодарская синагога — это что, военный объект?
— Да, военный, потому что имеет разрешение от Росатома на манипуляции с радиоактивными веществами, а также иными веществами, опасными в отношении массового поражения. Именно это было выявлено группой краснодарцев во главе с Мариной Мелиховой.

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

Что такое код ifx_create_blob

(PHP 3>= 3.0.4, PHP 4 )

ifx_create_blob — Creates an blob object

Description int ifx_create_blob ( int type, int mode, string param)

Creates an blob object.

type: 1 = TEXT, 0 = BYTE

mode: 0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

param: if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Return FALSE on error, otherwise the new blob object-id.

How To ifx_create_blob():

//1st call it and put result into an array
$blobs[] = ifx_create_blob($type, $mode, $data);
//do it as many times as needed
//then you use it to call ifx_query
ifx_query($stmt, $conn, $cursor, $blobs);


Что такое код ifx_create_blob

Объект Blob представляет из себя объект наподобие файла с неизменяемыми, необработанными данными. Blob-ы представляют данные, которые могут быть не в родном формате JavaScript. Интерфейс File основан на Blob , наследует функциональность Blob и расширяет его для поддержки файлов на стороне пользователя.

Для создания Blob не из blob-ных объектов и данных, используйте конструктор Blob() . Для того чтобы создать blob из подмножества данных из другого blob-а, используйте метод slice() . Для того чтобы получить объект Blob для файла на пользовательской файловой системе, смотрите докуметацию File .

API принимающие Blob объекты также перечислены в документации File .

Заметка: Метод slice() имеет изначально задаваемую длину как второй аргумент, что используется для указания числа байт копируемых в новый Blob. Если указать такие параметры start + length , которые превышают размер исходного Blob , то возвращаемый Blob будет содержать данные от начального индекса (start index) до конца исходного Blob.

Конструктор

Свойства

Методы

Примеры

Пример использования конструктора Blob

Blob() constructor позволяет создавать blob-ы из других объектов. Например, чтобы сконструировать blob из строки:

До того как конструктор Blob стал доступен, это могло быть выполнено через устаревший API BlobBuilder :

Пример для создания URL для типизированного массива используя blob

Пример извлечения данных из Blob

Есть только один способ прочесть содержимое из Blob-а — это использовать FileReader . Следующий код читает содержимое Blob-а как типизированный массив.

Используя другие методы FileReader , возможно прочесть содержимое blob-а как строку или как data URL.

ifx_create_blob

(PHP 4, PHP ifx_create_blob — Creates an blob object

Описание

Creates a blob object.

Список параметров

1 = TEXT, 0 = BYTE

0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Возвращаемые значения

Returns the new BLOB object-id, or FALSE on errors.

Смотрите также

  • ifx_copy_blob() — Duplicates the given blob object
  • ifx_free_blob() — Deletes the blob object

Коментарии

How To ifx_create_blob():

//1st call it and put result into an array
$blobs [] = ifx_create_blob ( $type , $mode , $data );
//do it as many times as needed
//then you use it to call ifx_query
ifx_query ( $stmt , $conn , $cursor , $blobs );
?>

©2020 КГБ: Киевская городская библиотека. All Rights Reserved — Справочники php5.kiev.ua. Киев , Украина . Ua-IX . GEO: 50,433334 30,516666

Webmaster email | Рекламная служба +38 050 4468872 9:00 — 21:00 | Обмен ссылками

Операции над BLOB данными

Interbase поддерживает следующие операции над BLOB данными:

Вставка новой строки включающей BLOB данные

Замена данных ссылающихся на BLOB столбец.

Обновление данных ссылающихся на BLOB столбец.

API Функции динамического SQL (DSQL) и структура данных XSQLD A необходимы, чтобы выполнить SELECT, INSERT, и инструкции UPDATE, требующиеся, чтобы выбирать, вставлять, или модифицировать уместные данные Blob.

6.1.Чтение данных из BLOB.

Эти шесть шагов требуются для чтения данных из существующего BLOB:

1. Создается обычная инструкция SELECT для выбора строки содержащей BLOB столбец.

2. Подготавливается структура для вывода данных XSQLDA.

3. Подготавливается SELECT инструкция.

4. Выполняется инструкция.

5. Выбираем строки одну задругой

6. Читаем и обрабатываем BLOB данные для каждой строки.

Опишем все это подробнее, для непонимающих.

6.2.Создание SELECT инструкции

«SELECT PROJ_NAME, PROJ_DESC, PRODUCT FROM PROJECT WHERE \

PRODUCT IN («software», «hardware»,»other») ORDER BY PROJ_NAME»;

Подготовка структуры вывода XSQLDA

1. Объявляем переменную содержащую XSQLDA

2. Выделяем память

out_sqlda = (XSQLDA *)malloc(XSQLDA_LENGTH(3));

3.Ставим версию и число выходных параметров

Подготовка SELECT инструкции для выполнения

После создания XSQLDA для содержания данных столбцов каждой выбранной строки,

Строку инструкции нужно подготовить к выполнению.

1. Объявляем и инициализируем дескриптор SQL инструкции,

с помощью известной нам функции isc_dsql_allocate_statement():

isc_stmt_handle stmt; /*Объявление дескриптора инструкции */

stmt = NULL; /* Установка дескриптора в NULL перед выполнением */

3. Подготавливаем строку для выполнения с помощью isc_dsql_prepare(),которая проверяет строку(str) на синтаксические ошибки, переводит строку в формат для эффективного выполнения, и устанавливает в дескриптор инструкции (stmt) ссылку на этот созданный формат (blr что ли). Дескриптор инструкции используется позднее в функции isc_dsql_execute().

Если isc_dsql_prepare()передан указатель на XSQLDA вывода, как в следующем примере, она будет заполнять большинство полей в XSQLDA и всех подструктур XSQLVAR информацией о типа данных, длине, и имени столбца в инструкции.

Пример вызова isc_dsql_prepare():

&trans, /* Устанавливается предварительным вызовом isc_start_transaction()*/

&stmt, /*Дескриптор инструкции устанавливается в вызове этой функции. */

0, /* Определяет что инструкция- строка заканчивается 0*/

str, /* Инструкция — строка */

SQLDA_VERSION1,/* Номер версии XSQLDA */


out_sqlda /* XSQLDA для хранения данных столбцов после выполнения инструкции */

3. Устанавливаем XSQLVAR структуру для каждого столбца:

— Определяем тип столбца ( если он не был установлен isc_dsql_prepare())

— Связываем указатель структуры XSQLVAR sqldata с соответствующей локальной переменной.

Для столбцов чьи типы неизвестных этому моменту:

Приводим элементы типа данных(необязательно), к примеру, из SQL_VARYING к SQL_TEXT.

Динамически выделяем место для хранения данных на которые указывает sqldata

— Определяем число байт данных передаваемых в sqldata

— Предоставляем значение NULL индикатора для параметров

Выбранные данные для Blob (и массивов)столбцов отличаются от других типов столбцов, так что поля XSQLVAR должны быть установлены по-другому. Для не -BLOB (и не массивов) столбцов, isc_dsql_prepare () устанавливают для каждый sqltype к соответствующему типу поля, и выбранные данные помещаются в область памяти на которую указывают соответствующие sqldata, при каждой операции fetch. Для столбцов Blob, тип должен быть установлен в SQL _Blob (или SQL _Blob + 1, если нужен индикатор NULL). InterBase сохраняет внутренний идентификатор Blob (BlobID), а не данные Blob, в памяти на которую кажет sqldata, когда строки данных выбраны, так что sqldata должна указывать на память с размером нужным для хранения BlobID.

Следующий пример кода иллюстрирует назначения для Blob и столбцов не-Blob, чей тип известен ко времени компиляции.

#define PROJLEN 20

#define TYPELEN 12

char proj_name[PROJLEN + 1];

char prod_type[TYPELEN + 1];

short flag0, flag1, flag2;

out_sqlda->sqlvar[0].sqltype = SQL_TEXT + 1;

out_sqlda->sqlvar[1].sqltype = SQL_Blob + 1;

out_sqlda->sqlvar[2].sqltype = SQL_TEXT + 1;

Выполнение инструкции

После того как инструкция подготовлена можно ее выполнить.

&trans, /* Устанавливается предварительным вызовом isc_start_transaction()*/

&stmt, /* выделяется isc_dsql_allocate_statement() */

1, /* XSQLDA version number */

NULL/* NULL так как нет входных параметров */

Эта инструкция создает список выбора, это строки возвращаемые после выполнения инструкции.

6.2.Извлечение выбранных строк

Конструкция цикла извлечения используется, чтобы извлечь(в XSQLDA вывода) данные столбцов для отдельной строки из списка выбора и обработать каждую строку прежде, чем следующая строка будет выбрана. Каждое выполнение isc_dsql_fetch () выбирает данные столбцов соответствующие подструктуры XSQLVAR структуры out_sqlda. Для столбца Blob, выбирается BlobID не являющийся фактическими данными, а просто указатель на них.

isc_dsql_fetch(status_vector, &stmt,1, out_sqlda))

printf(«\nPROJECT: %–20s TYPE:%–15s\n\n»,

/* Read and process the Blob data (seenext section) */

if (fetch_stat != 100L)

/* isc_dsql_fetch returns 100 if no morerows remain to be

Чтение и обработка BLOB данных

Для чтения и обработки BLOB данных

Объявите и инициализируйте BLOB дескриптор

isc_blob_handle blob_handle; /* Объявление BLOB дескриптора. */

blob_handle= NULL; /* Уставите его в NULL перед использованием*/

Создайте буфер для хранения каждого прочитанного BLOB сегмента. Его размер должен быть максимальным размером сегмента в вашей программе используемой для чтения BLOB.

3. Объявите беззнаковую short переменную в которую IB будет хранить фактическую длину каждого прочитанного сегмента:

unsigned short actual_seg_len;

4. Открываем BLOB c извлеченным ранее blob_id

&blob_handle,/*Устанавливается этой функцией для ссылки на BLOB */

&blob_id,/* Blob ID полученный из out_sqlda которую заполнил isc_dsql_fetch() */

0,/* BPB length = 0; фильтр не будем использовать */

NULL/* NULL BPB, фильтр не будем использовать */

5.Читаем все BLOB данные вызывая повторно isc_get_segment(), берущую каждый Blob сегмент и его длину. Обрабатываем каждый прочитаны сегмент.

&blob_handle, /* Устанавливается isc_open_blob2()*/

&actual_seg_len,/* Длина прочитанного сегмента */

sizeof(blob_segment),/* Длина буфера сегмента */

blob_segment/* буфер сегмента */

while (blob_stat == 0 ||status_vector[1] == isc_segment)

/*isc_get_segment возвращает 0 если сегмент был полностью прочитан.

/*status_vector[1] устанавливается в isc_segment только часть */

/*сегмента была прочитана из-за буфера (blob_segment) не являющегося */

/*достаточно большим. В этом случае придется делать дополнительные вызовы */

/*isc_get_segment() для дочитывания. */

printf(«%*.*s»,actual_seg_len, actual_seg_len, blob_segment);

blob_stat =isc_get_segment(status_vector, &blob_handle,

6. Закрываем BLOB

6.2.Запись данных в BLOB

Перед тем как создать новый BLOB и записать туда данные вы должны сделать следующее.

Включить BLOB данные в строку вставляемую в таблицу

Заменить данные ссылающиеся на BLOB столбец строки

Обновить данные ссылающиеся на BLOB столбец строки

Вносимый в столбец Blob фактически не содержит данных Blob. Он содержит BlobID ссылающийся на данные, которые сохранены в другом месте. Так, чтобы установить или изменить столбец Blob, Вы должны установить (или сбросить) BlobID, сохраненный в нем. Если столбец Blob содержит BlobID, и Вы изменяете столбцы относящиеся к различным Blob (или содержащим NULL), Blob на который ссылается предварительно сохраненный BlobID будет удален в течение следующей сборки «мусора».(. )

Все эти операции требуют следующих шагов:

1. Подготовьте соответствующую инструкцию DSQL. Это будет инструкция INSERT, если Вы вставляете новую строку в таблицу, или инструкция UPDATE для изменения строки. Каждая из этих инструкций будет нуждаться в соответствующей структуре ввода XSQLDA для передачи параметров инструкции во время выполнения. BlobID нового Blob будет одним переданных значений

2. Создайте новый BLOB, и запишите в него данные.

3. Свяжите BLOB ID нового BLOB со столбцом таблицы строк над которой вы будете выполнять INSERT и UPDATE.

Примечание: вы не можете непосредственно обновлять BLOB данные. Если вы желаете модифицировать BLOB данные, вы должны:

Создать новый BLOB

Прочитать данные из старого BLOBA в буфер где вы сможете отредактировать и модифицировать их.


Записать измененные данные в новый BLOB.

Подготовить и выполнить инструкцию UPDATE которая модифицирует BLOB столбец содержащий BLOBID нового BLOB, заменяющий старый BLOB ID.

Секция ниже описывает шаги требуемые для вставки, обновления, и замены BLOB данных.

Подготовка UPDATE или INSERT инструкции.

1. Создаем саму строку для обновления

«UPDATE PROJECT SET PROJ_DESC = ? WHERE PROJ_ >

или для вставки

char *in_str = «INSERT INTO PROJECT(PROJ_NAME, PROJ_DESC, PRODUCT,

2. Объявляем переменную содержащую структуру входных параметров

3. in_sqlda = (XSQLDA*)malloc(XSQLDA_LENGTH(2));

4. in_sqlda->version = SQLDA_VERSION1;

5.Установить XSQLVAR структуру в XSQLDA для каждого передаваемого параметра.

Определяем типы данных элементов

Для параметров типы которых известны во время компиляции: указатель sqldata связываем с локальной переменной содержащей передаваемый данные.

Для параметров типы которых неизвестны во время выполнения: выделяем память для хранения данных на которые указывает sqldata

Определяем число байт данных(размер)

Следующий код иллюстрирует все это для столбца BLOB и одного столбца тип данных которого известен во время компиляции.

#define PROJLEN 5

char proj_id[PROJLEN + 1];

in_sqlda->sqlvar[0].sqltype =SQL_Blob + 1;

Proj_id должна быть инициализирована во время выполнения (если значение не известно во времени компиляции). Blob_id должна быть установлена, чтобы обращаться к недавно созданному Blob, как описано в следующих секциях

Создание нового BLOB и хранения данных

1. Объявление и инициализация BLOB дескриптора:

isc_blob_handle blob_handle; /* Объявления BLOB дескриптора */

blob_handle= NULL; /* Устанавливаем дескриптор в NULL перед использованием*/

2. Объявление и инициализация BLOB ID:

ISC_QUAD blob_id; /* Объявление Blob ID. */

3. Создание нового BLOB вызовомisc_create_blob2():

&blob_handle,/* устанавливается этой функцией ссылка на новый Blob */

&blob_id,/* Blob ID устанавливается этой функцией*/

0, /* Blob Parameter Buffer length = 0;no filter will be used*/

NULL /* NULL Blob Parameter Buffer, since no filter will be used*/

Эта функция создает новый BLOB открывает его для записи, и устанавливает blob_handle к указателю на новый BLOB

isc_create_blob2() также связывает BLOB с BLOBID, и устанавливает blob_id к указателю на BLOBID.

4. Записываем все данные, которые будут записаны в Blob, делая ряд вызовов isc_put_segment (). Следующий пример читает строки данных, и связывает каждый Blob с упомянутым blob_handle. (Get_line () читает следующую строку данных, которые будут написаны.)

unsigned short len;

&blob_handle,/* set by previousisc_create_blob2() */

len,/* длина буфера содержащего данные для записи */

line/* буфер содержащий данные для записи в BLOB*/

if (status_vector[0] == 1 &&status_vector[1])

5. Закрываем BLOB

Связывание нового BLOB с BLOB столбцом

Выполнение инструкции UPDATE связывает новый BLOB с BLOB столбцом в строке выбранной инструкции.

6.3.Удаление BLOB

существуют четыре способа удаления BLOB.

Удаляем строку содержащую BLOB. Вы можете использовать DSQL для выполнения DELETE инструкции.

Заменяем различные BLOB. Если Blob столбец содержит BlobID, и вы модифицируете столбец ссылающийся на разные BLOB, ранее сохраненный BLOB будет удален следующей сборкой “мусора”.

Сбрасываем в NULL столбец ссылающийся на BLOB, к примеру, используя DSQL инструкцию как следующую:

UPDATE PROJECT SET PROJ_DESC = NULLWHERE PROJ_

Blob на который указывал удаленный blob_id будет удален следующей сборкой «мусора»

— Отказываемся от BLOB, после того как он был создан но, не был связан еще с определенным столбцом в таблице, используя isc_cancel_blob() функцию.

Запрос информации об открытом BLOB

После того, как приложение открывает Blob, оно может получить информацию о Blob.

Isc_blob_info () позволяет приложению сделать запрос для информации о Blob типа общего количества

числа сегментов в Blob, или о длине, в байтах, самого длинного сегмента. В дополнение к указателю на вектор состояния ошибки и дескриптор Blob, isc_blob_info () требует двух предоставляемых приложением буферов, буфера списков элементов, где приложение определяет информацию, которая требуется, и буфер результатов, куда InterBase возвращает требуемую информацию. Приложение заполняет буфер списков элементов с информационными запросами для isc_blob_info(), и передает ему указатель на буфер списков элементов, а также размер, в байтах, этого буфера.

Приложение должно также создать буфер результата, достаточно большой, чтобы хранить информацию, возвращенную InterBase. Оно передает указатель на буфер результата, и размер, в байтах, этого буфера в isc_blob_info(). Если InterBase пытается поместить, больше информации чем может вместить буфер результатов, она помещает значение, isc_info_truncated, определенное в ibase.h, в последний байт буфера результатов.

Буфер списка элементов запрашиваемой информации и буфер результатов.

Буфер списка элементов это char массив содержащий запрашиваемые байты значений. Каждый байт есть пункт определяющий тип желаемой информации.

Соответствующие константны определены в ibase.h

#define isc_info_blob_num_segments 4

#define isc_info_blob_max_segment 5

#define isc_info_blob_total_length 6

#define isc_info_blob_type 7

Буфер результатов содержит серию кластеров информации по каждому запрошенному элементу. Каждый кластер содержит три части.

Первый байт определяет тип возвращенной информации.

Второй байт – число определяющее число байт до конца кластера (длина инфо)

Значение хранимое в переменном числе байт, которое интерпретируется в зависимости от типа первого байта кластера

Следующая таблица показывает элементы информацию о которых можно получить

Элемент Возвращаемое значение

Запрашиваемый и возвращаемый элемент

Полное число сегментов

Длина самого длинного сегмента


Полный размер в байтах BLOB

Тип BLOB(0:сегментированный, 1:поток)

В дополнение к этой информации IB возвращенной ответ на запрос, IB может также возвратить один или несколько сообщений состояния в буфер результата. Каждое сообщение состояния есть беззнаковый байт в длине

Результирующий буфер слишком маленький для хранения запрашиваемой информации

Запрашиваемая информация неопеределена. Проверьте status_vector и сообщения.

6.4.Пример вызова isc_blob_info( )

Следующий код запрашивает число сегментов и максимальный размер сегмента для BLOB после открытия, получаемая информация помещается в буфер результатов

char res_buffer[20], *p, item;

SLONG max_size = 0L, num_segments = 0L;

&db_handle, /* database handle, setby isc_attach_database() */

&tr_handle, /* transaction handle, setby isc_start_transaction()

&blob_handle, /* set by thisfunction to refer to the Blob */

&blob_id, /* Blob ID of the Blob toopen */

0, /* BPB length = 0; no filter will beused */

NULL /* NULL BPB, since no filter willbe used */

if (status_vector[0] == 1 &&status_vector[1])

&blob_handle, /* Set inisc_open_blob2() call above. */

sizeof(blob_items),/* Length ofitem-list buffer. */

blob_items, /* Item-list buffer. */

sizeof(res_buffer),/* Length of resultbuffer. */

res_buffer /* Result buffer */

if (status_vector[0] == 1 &&status_vector[1])

/* An error occurred. */

/* Extract the values returned in theresult buffer. */

for (p = res_buffer; *p != isc_info_end;)

length = (short)isc_vax_integer(p, 2);

max_size = isc_vax_integer(p, length);

6.5.Blob дескрипторы

Blob дескриптор используется для предоставления динамического доступа к BLOB информации. К примеру, он может быть использован для хранения информации о BLOB данных для фильтрации, еще как кодовая страница для текстовых BLOB данных и информации о подтипе текстовых данных и не текстовых данных.

Два дескриптора Blob необходимы всякий раз, когда фильтр используется при записи или чтении Blob: один описывать данные источника фильтра, и другой цель.

BLOB дескриптор это структура определенная в заголовочном файле ibase.h как следующая:

short blob_desc_subtype; /* type of Blobdata */

short blob_desc_charset; /* characterset */

short blob_desc_segment_size; /* segmentsize */

unsigned char blob_desc_field_name [32];/* Blob column name */

unsigned char blob_desc_relation_name[32]; /* table name */

Размер сегмента BLOB есть максимальное число байт в приложении

Размер сегмента Blob -максимальное число байтов, которые приложение, как ожидается, запишет или будет читать из Blob. Вы можете использовать этот размер, чтобы выделить ваши собственные буфера. Blob_desc_relation_name и blob_desc_field_name поля содержащие строки с нулевым символом в конце.

Заполнение blob дескриптора

Есть четыре варианта для заполнения blob дескриптора

Вызываем isc_blob_default_desc(). И заполняем ей поля дескриптора значениями по умолчанию. Подтип по умолчанию есть 1 (TEXT), сегмент размером 80 байт, кодовая страница по умолчанию есть страница установленная для вашего процесса.

Вызываем isc_blob_lookup_desc(). Она обращается к системным таблицам и берет оттуда информацию о BLOB и заполняет ею поля дескриптора.

Вызываем isc_blob_set_desc(). Она инициализирует дескриптор из параметров вызова, быстрее нежели получать доступ к метаданным.

Устанавливаем поля дескриптора напрямую.

Следующий пример вызывает isc_blob_lookup_desc () чтобы узнать текущий подтип и информацию о наборе символов для столбца Blob по имени PROJ_DESC в таблице PROJECT. Функция сохраняет информацию в исходном описателе from_desс.

&db_handle; /* Set by previousisc_attach_database() call. */

&tr_handle, /* Set by previousisc_start_transaction() call. */

«PROJECT», /* имя таблицы */

«PROJ_DESC»,/* название столбца */

&from_desc,/* Blob дескриптор заполняется этой функцией. */

&global/* глобальное название колонки возвращаемое этой функцией */

Фильтрация BLOB данных

Фильтр Blob это подпрограмма, которая транслирует данные Blob из одного подтипа в другой.

InterBase включает набор специальных внутренних фильтров Blob, которые преобразовывают подтип 0

( Неструктурные данные) в подтип1 (ТЕКСТ), и из подтипа 1 к подтипу 0.

В дополнение к использованию этих стандартных фильтров, Вы можете создавать ваши собственные внешние фильтры, чтобы обеспечивать специальное конвертирование данных. Например, Вы могли бы разрабатывать фильтр, чтобы преобразовывать один формат изображения к другому, например отображать то же самое изображение на мониторах с различными разрешающими способностями. Или Вы могли бы конвертировать двоичный Blob к простому тексту , чтобы легко файл переносить от одной системы к другой. Если Вы определяете фильтры, Вы можете назначать их идентификаторы подтипа от -32,768 до -1. Следующие разделы дают краткий обзор того, как писать фильтры Blob, и сопровождаются подробностями , как написать приложение, которое требует фильтрации.

Обратите внимание, что фильтры Blob доступны для баз данных, находящихся на всех платформах сервера InterBase кроме Системы Netware, где фильтры Blob не могут быть созданы.

6.6.Использование ваших собственных фильтров

В отличие от стандарта фильтров InterBase, которые конвертируют подтипом 0 в подтип 1 и наоборот, внешний фильтр Blob — вообще часть библиотеки подпрограмм, которые Вы создаете и связываете с приложением. Вы можете писать, Blob на C или Паскаль (или любой язык, который может называться из C).Чтобы использовать ваши собственные фильтры, следуйте по этим шагами:

1. Решите, какой фильтр Вы, должны написать.

2. Напишите фильтры в базовом языке.

3. Сформируйте общедоступную библиотеку фильтров.

4. Сделайте библиотеку фильтров доступной.

5. Определить фильтры для базы данных.

6. Напишите приложение, которое требует фильтрацию.

Шаги 2, 5 и 6 будут лучшеописаны в следующих разделах.

6.7.Объявление внешнего фильтра BLOB для БД

Для объявления внешнего фильтра для БД, используйте инструкции DECLARE FILTER. К примеру, следующая инструкция объявляет фильтр, SAMPLE:

DECLARE FILTER SAMPLE

INPUT TYPE –1 OUTPUT_TYPE –2

ENTRY POINT «FilterFunction»

В примере, входной подтип фильтра определен как -1 и его выходной подтип как -2. Если подтип -1определяет текст нижнего регистра, а подтип -2 текст верхнего регистра, то цель фильтра SAMPLE состояла бы в том, чтобы перевести данные Blob из текста нижнего регистра в текст верхнего регистра.


Параметры ENTRY_POINT И MODULE_NAME определяют внешнюю подпрограмму, которую вызывает, когда вызывается фильтр. Параметр MODULE_NAME определяет filter.dll, динамически загружаемую библиотеку, содержащую выполнимый код фильтра. Параметр ENTRY_POINT определяет точку входа в DLL. Хотя пример показывает только простое имя файла, это — хорошая практика для определения полного квалифицированного пути, начиная с пользователей вашего приложения желающих загрузить файл.

6.8.Создание внешних Blob фильтров

Если Вы хотите создавать ваши собственные фильтры, Вы должны иметь детальное понимание типов данных , которые Вы планируете конвертировать. InterBase не делает строгой проверки типа данных на данные Blob; это — ваша ответственность.

Определений функций фильтров

При написании фильтра, Вы должны включить точку входа, известной функции фильтра, в секции объявления программы. InterBase вызывает функцию фильтра, когда приложение выполняет операции на Blob, определенные для использования фильтра. Вся связь между InterBase и фильтром происходит через функцию фильтра. Функция самого фильтра может вызывать другие функции, которые включает исполняемая программу фильтра.

Вы объявляете имя функции фильтра и имя выполняемой программы — фильтра с параметрами ENTRY_POINT И MODULE_NAME в инструкции DECLAREFILTER.

Функция фильтрадолжна иметь следующее объявление, вызывающее последовательность:

filter_function_name(short action, isc_blob_ctl control);

Параметр, action, является одним из восьми возможных макроопределений действия, и параметр, control- элемент isc_blob_ctl, управляющей структуры Blob, определенной в файле заголовка InterBase, ibase.h. Эти параметры обсуждаются позже в этой главе.

Следующий листинг скелетного фильтра описывает функцию фильтра, jpeg_filter:

#define SUCCESS 0

#define FAILURE 1

ISC_STATUS jpeg_filter(short action, isc_blob_ctl control)

ISC_STATUS status = SUCCESS;

InterBase передает одно из восьми возможных действий к функции фильтра, jpeg_filter, посредством параметра action, и также передает экземпляр управляющей структуры Blob, isc_blob_ctl, посредством параметра, control. ellipses (…) в предыдущем листинге представляют код, который выполняет некоторые операции, для каждого действии, или случая, который перечислен в инструкции case.

6.9.Определение управляющей структуры BLOB

Управляющая структура BLOB предоставляет основные методы обмена данными между фильтром и Interbase.

Управляющая структура BLOB определена при помощи typedef, isc_blob_ctl. в ibase.h вот так:

typedef struct isc_blob_ctl <

/* Указатель на внутреннюю InterBase Blob подпрограмму доступа.(функтор) */

struct isc_blob_ctl *ctl_source_handle;

/* Экземпляр ofisc_blob_ctl передаваемый во внутреннюю подпрограмму доступа IB*/

short ctl_to_sub_type;/* Целевой подтип */

short ctl_from_sub_type;/* Исходный подтип */

unsigned short ctl_buffer_length; /* Длина ctl_buffer. */

unsigned short ctl_segment_length; /* Длина текущего сегмента */

unsigned short ctl_bpb_length; /* Длина буфера параметров BLOB. */

char *ctl_bpb; /* Указатель на буфер параметров BLOB */

unsigned char*ctl_buffer; /* Указатель на сегментный буфер */

ISC_LONGctl_max_segment; /* Длина самого длинного BLOB сегмента */

ISC_LONGctl_number_segments; /* Полное число сегментов */

ISC_LONGctl_total_length; /* Полная длина BLOB*/

ISC_STATUS*ctl_status;/* Указатель на статус вектор */

long ctl_data[8];/* Данные определяемые приложением */

Семантика некоторых isc_blob_ctl полей зависит от выполняемого действия.

Например, когда приложение вызывает isc_put_segment () функцию API, InterBase передает isc_blob_filter_put_segment — действие функции фильтра. Буфер, указатель на буфер, ctl_buffer — поле управляющей структуры, передаваемый функции фильтра, содержит сегмент данных, которые будут записано, как определено приложением в его запросе к isc_put_segment (). Поскольку буфер содержит информацию, передаваемую в функцию фильтра, это называется полем IN. Функция фильтра должна включить инструкции в инструкцию case под isc_blob_filter_put_segment для выполнения фильтрации и затем передачи данных для записи в базу данных. Это может быть сделано, вызовом *ctl_source подпрограммы доступной внутри Interbase подпрограммы. Для подробной информации относительно ctl_source, см. Руководство Программиста.

С другой стороны, когда приложение вызывает isc_get_segment () функцию API, и буфер, на него указывает ctl_buffer в управляющей структуре переданной функции фильтра, пуст. В этом случае, InterBase передает isc_blob_filter_get_segment действие- функции фильтра. Обработка действия- функции isc_blob_filter_get_segment фильтра должна включить команды для заполнения ctl_buffer сегментом данных из базы данных, чтобы возвратить его приложению. Это может быть сделано, вызовом *ctl_source подпрограммы доступной внутри IB. В этом случае, буфер используется для вывода информации функцией фильтра, и называется полем OUT.

Следующая таблица описывает каждое из полей в isc_blob_ctl управляющей структуре Blob, используются ли они для ввода функции фильтра (IN), или вывода (OUT).

Что такое код ifx_create_blob

(PHP 3 >= 3.0.4, PHP 4, PHP 5)

ifx_create_blob — Creates an blob object

Description int ifx_create_blob ( int type, int mode, string param )

Creates a blob object.

Parameters

1 = TEXT, 0 = BYTE

0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Return Values

Returns the new BLOB object- > FALSE on errors.

Что такое код ifx_create_blob

(PHP 3>= 3.0.4, PHP 4 )

ifx_create_blob — Creates an blob object

Description int ifx_create_blob ( int type, int mode, string param)

Creates an blob object.

type: 1 = TEXT, 0 = BYTE

mode: 0 = blob-object holds the content in memory, 1 = blob-object holds the content in file.

param: if mode = 0: pointer to the content, if mode = 1: pointer to the filestring.

Return FALSE on error, otherwise the new blob object-id.

Новые книги

Священные войны, они же

– непременный атрибут жизни FOSS-мира. И потому в этой книжке будут собраны все материалы на эту тему, сочинявшиеся на протяжении десятилетия. Они дополнены материалом злободневным –

трех дистрибутивов Linux из числа самых популярных: Fedora, openSUSE, Ubuntu.

ifx_create_blob

(PHP 3>= 3.0.4, PHP 4)

ifx_create_blob — создаёт blob-объект.

Описание

int ifx_create_blob (int type, int mode, string param)

type: 1 = TEXT, 0 = BYTE

mode: 0 = blob-объект хранит содержимое в памяти, 1 = хранит содержимое в файле.

param: если mode = 0: указатель на содержимое, если mode = 1: указатель на строку файла/filestring.

Возвращает FALSE при ошибке, иначе id нового blob-объекта.

Илон Маск рекомендует:  Модели для арифметического кодирования
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Учебник РНР
НазадВперёд