Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Битовые операции / 16 сообщений из 16, страница 1 из 1
24.09.2003, 11:05
    #32273804
dagr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Народ, правильно ли я понял, что в DB2 их нет.
Если да, то кто нить может сказать почему?
...
Рейтинг: 0 / 0
24.09.2003, 11:53
    #32273861
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Зато есть механизм для их создания. UDF.
...
Рейтинг: 0 / 0
24.09.2003, 13:08
    #32274002
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Вообще-то можно и без UDF, пользуясь делением, остатком от деления (MOD) и умножением. Например, сдвиг вправо на 1 все равно как деление на 2.

Лично я считаю, что пользователи битовых операций (вроде ТАИС'а, что в Сирене запихнул при их (битовых операций) помощи три поля в одно) - [censored]. Усложнять себе и другим (в том числе оптимизатору) ради неизвестно чего - грошовой экономии дискового пространства?
...
Рейтинг: 0 / 0
01.10.2003, 18:47
    #32281191
Okram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
2Alexey Popov
a mogno pokonkretnee kak imenno eto ydelat\
...
Рейтинг: 0 / 0
02.10.2003, 09:41
    #32281452
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Можно. Но до сих пор я писал только под Win32 на Delphi :)
1. Создаешь DLL с нужной экспортируемой функцией.
Ex:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Library dbudf;

type
  PInteger = ^Integer;

procedure lib_xor(Val1, Val2: PInteger; Result: PInteger;
  Val1_Null, Val2_Null: PInteger; Result_Null: PInteger;
  SqlState, FuncName, SpecName, MsgText: PChar); stdcall;
begin
  if (Val1_Null^ = - 1 ) or (Val2_Null^ = - 1 ) then
    Result_Null^:= - 1 
    else
    Result^:= Val1^ xor Val2^
end;

exports
  lib_xor index  0 ;

begin
end.

Val1_Null & Val2_Null - индикаторы на передаваемые NULL - значения в UDF. Result_Null - признак возвращаемого результата = NULL.
Подробнее можно посмотреть в Application Development Guide .

2. Затем копируешь DLL в [$SQLLIB]\function

3. Для БД пишешь CREATE FUNCTION...
См. SQL Reference
...
Рейтинг: 0 / 0
02.10.2003, 11:49
    #32281702
Okram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Da mne pod linux nado

a chto na C UDF napisat\ nelsya?
ved\ mogno no ya neynayu kak?

ya tut nashol primerchik no ne znayu horosh li on
ocenite pogaluysta

Код:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE FUNCTION BITAND (N1 Integer, N2 Integer)
 RETURNS Integer
 SPECIFIC BITANDOracle
 LANGUAGE SQL
 CONTAINS SQL
 NO EXTERNAL ACTION
 DETERMINISTIC
 RETURN 
WITH
 Repeat (S, M1, M2, Ans) AS
(Values (0, N1, N2, 0)
Union All
Select S+1, M1/2, M2/2, Ans+MOD(M1,2)*MOD(M2,2)*power(2,S)
  From Repeat
 Where M1 > 0
   AND M2 > 0
   AND S < 32
)
SELECT ANS
  FROM Repeat
 WHERE S = (SELECT MAX(S)
              FROM Repeat)
...
Рейтинг: 0 / 0
02.10.2003, 12:58
    #32281836
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
это полхой примерчик :)




----------- blablabla.cpp -----------------
extern "C" int or (int a, int b) { return a|b;}
extern "C" int and (int a, int b) {...}
...............................................
----------------------------------------
gcc -share blablabla.cpp (вроде так забыл уже все ключики в линуксе

----------- SQL ------------------------
create function myor( int, int)
returns integer
...
language c
parameter style general
external name 'blablabla.so!or'
...........

------------------------------------------
...
Рейтинг: 0 / 0
02.10.2003, 13:00
    #32281841
Okram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Spasibo budem smotret' i probyvat'
...
Рейтинг: 0 / 0
02.10.2003, 13:07
    #32281852
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
>gcc -share blablabla.cpp
g++ -share blablabla.cpp
...
Рейтинг: 0 / 0
02.10.2003, 13:29
    #32281901
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Okram,
выкинь мой пример. возврат результата из ф-ции осуществл. немножко по другому.


/*
CREATE FUNCTION OR(INT,INT)
RETURNS INT
LANGUAGE C
EXTERNAL NAME ' '
DETERMINISTIC
NO SQL
NO EXTERNAL ACTION
PARAMETER STYLE SQL
ALLOW PARALLEL;
*/


void OR(int *a,int *b,int *out,short *inind,
short *outind,char *sqlstate,char *funcname,char *msgtext);

p.s.
и што это со мной сегодня происходит...
...
Рейтинг: 0 / 0
02.10.2003, 13:41
    #32281930
Okram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
Teper' ya uge sovsem zaputalsya
Nu tak chto i gde pisat' i kompilit' ???
...
Рейтинг: 0 / 0
02.10.2003, 14:09
    #32281990
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
ф-ция на с немного другая.

сишник
extern "C"
void or(int *a, int *b, int *out, short *inind, short *outind);
{
*outind = -1;
if(0>=inind[0] || 0>=inind ) return;
*out = (*a)|(*b);
*outind = 1;
}



и парамер стайл должен быть генерал with nulls
...
Рейтинг: 0 / 0
02.10.2003, 14:11
    #32281993
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
ф-ция на с немного другая.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
сишник
extern  "C" 
void or(int *a, int *b, int *out, short *inind, short *outind); 
{
  *outind = - 1 ;
  if( 0 >=inind[ 0 ] ||  0 >=inind[ 1 ] ) return;
  *out = (*a)|(*b); 
  *outind =  1 ;
}


там все съехало
...
Рейтинг: 0 / 0
02.10.2003, 14:43
    #32282054
Okram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
delayu
gcc or.c

i cho poluchayu

or.c:3: error: parse error before string constant
or.c:10: error: `a' undeclared here (not in a function)
or.c:10: error: `b' undeclared here (not in a function)
or.c:10: warning: data definition has no type or storage class
or.c:12: warning: initialization makes pointer from integer without a cast
or.c:12: warning: data definition has no type or storage class
or.c:14: error: parse error before '}' token
or.c:14:2: warning: no newline at end of file
...
Рейтинг: 0 / 0
02.10.2003, 14:53
    #32282073
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
либо
g++ -share or.c

либо снеси строку
' extern "C" '
и
gсс -share or.c
...
Рейтинг: 0 / 0
02.10.2003, 15:16
    #32282123
Okram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые операции
toge samoye :(((
nado RTFM
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Битовые операции / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]