|
MySQL.RU - Webboard
Вернуться
UDF аргументы больше 256 байт (Вадим) 21/12/2011 - 12:42:44
Re: UDF аргументы больше 256 байт (Akina) 21/12/2011 - 16:29:33
Re: UDF аргументы больше 256 байт (Вадим) 22/12/2011 - 10:11:00
Re: UDF аргументы больше 256 байт (Akina) 22/12/2011 - 17:03:24
Re: И ещё... (Akina) 23/12/2011 - 09:14:34
Re: И ещё... (Вадим) 23/12/2011 - 11:44:54
Re: Я, конечно, в Дельфах не спец (Akina) 23/12/2011 - 22:29:18
Re: Да! (Akina) 23/12/2011 - 22:49:37
Re: Да! (Вадим) 26/12/2011 - 13:19:25
> Original message text:
> From: Вадим - 21/12/2011 - 12:42:44
> Subject:UDF аргументы больше 256 байт
> -----------------
> Ох и намучился я уже с UDF не могу передать аргументы длинной больше 256 байт.
> Возможно ли это в принципе?
> Среда разработки UDF (Embarcadero DELPHI 2010)
>
>
From: Вадим - 23/12/2011 - 11:44:54
Subject:И ещё...
-----------------
> Original message text:
> From: Akina - 22/12/2011 - 17:03:24
> Subject:UDF аргументы больше 256 байт
> -----------------
> У тебя контент поля value длиннее 256 байт? а какой у него тип? и как именно описана функция в библиотеке?
Да, размер поля value типа varchar длиннее 256 байт. Функция описана аналогично примеру: http://forums.mysql.com/read.php?118,57815,73364#msg-73364 (пример также вешает сервер, если длина строки больше 256).
Мой код:
library lib3;
uses
SysUtils, Classes, text_rule;
const
STRING_RESULT = 0;
REAL_RESULT = 1;
INT_RESULT = 2;
ROW_RESULT = 3;
DECIMAL_RESULT= 4;
type
my_bool = byte;
uint = LongWord;
ulong = LongWord;
ppChar = ^pansiChar; // pointer to an array of pChars
puint = ^uint; // pointer to an array of uints
pUlong = ^ulong;
ItemResult = STRING_RESULT..DECIMAL_RESULT;
pItemResult = ^ItemResult;
pByte = ^byte;
pDouble = ^Double;
pInteger = ^integer;
ItemResultArr = array [1..1000] of integer; // ItemResult;
CharArr = array [1..1000] of pAnsiChar;
uintArr = array [1..1000] of uint;
ByteArr = array [1..1000] of byte;
Int64Arr = array [1..1000] of int64;
pItemResultArr = ^ItemResultArr;
pAnsiCharArr = ^CharArr;
puintArr = ^uintArr;
pByteArr = ^ByteArr;
pInt64Arr= ^Int64Arr;
pUDF_ARGS = ^UDF_ARGS;
UDF_ARGS = packed record
arg_count : uint; // Number of arguments
arg_type : pItemResultArr; // Pointer to item_results
args : pAnsiCharArr; // Pointer to argument
lengths : puintArr; // Length of string arguments
maybe_null: pByteArr; // Set to 1 for all maybe_null args
attributes: pAnsiCharArr; // Pointer to attribute names
attribute_lengths: puintArr;// Length of attribute arguments
end;
// This holds information about the result
pUDF_INIT = ^UDF_INIT;
UDF_INIT = packed record
maybe_null: my_bool; // 1 if function can return NULL
decimals : uint; // for real functions
max_length: uint; // For string functions
ptr : pAnsiChar; // free pointer for function data
const_item: my_bool; // 0 if result is independent of arguments
end;
// _init обязательная для определения требуемой памяти
function damlev_init (initid: pUDF_INIT;
_args: pUDF_ARGS;
_message: pAnsiChar): my_bool; cdecl;
var
i: integer;
begin
result := 0;
with initid^ do
begin
// decimals := 5;
max_length := 512; //длина результата
const_item := 1;
end;
with _args^ do
for i := 1 to arg_count do
arg_type[i] := STRING_RESULT ;
end;
procedure damlev_deinit (initid: pUDF_INIT); cdecl;
begin
FreeMem(initid^.ptr);
end;
function damlev (initid: pUDF_INIT; // параметры MySQL
_args: pUDF_ARGS; // параметры MySQL
res: pAnsiChar; // только для string
len: ulong; // только для string
is_null: pByte;
is_error: pByte): pAnsiChar; cdecl;
var
a,s,t:ansistring;
n:integer;
begin
with _args^ do
try
begin
s:=pAnsiChar(copy(ansistring(args[1]),1,lengths[1])+#0); //первый аргумент - поле таблицы
t:=pAnsiChar(args[2]+#0); //второй аргумент - строка, #0 - символ конца строки pAnsiChar
n:=dam_lev2(s,t); //функция из модуля text_rule
a:=inttostr(n)+#0;
Res:=pansichar(a);
Len:=length(a); //lengths[1]; //поиск длины результата
result:=res;
end;
except
pByte(is_null)^:=1;
end;
end;
exports
damlev_init,
damlev_deinit,
damlev;
end.
> From: Akina - 23/12/2011 - 09:14:34
> Subject:И ещё...
> -----------------
> а вызов той же функции (и всей обвязки) НЕ ИЗ MySQL работает нормально?
Да. И если тип поля value меньше 256 байт всё тоже работает нормально.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
40849
|
|