powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Compress, ZIP и т.п. в ASA9
6 сообщений из 6, страница 1 из 1
Compress, ZIP и т.п. в ASA9
    #34780914
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно интересует кто-нибудь использовал ф-ию compress для генерации gzip результата. Очень хочется прикрутить это дело ко встроенному HTTP серверу (реализовать Content-Encoding: gzip).
Сравнив умолчательные упаковки ZIP, GZIP и результат функции compress пришел к выводу, что ядро с запакованными данными одинаковое, все отличия только в заголовке и хвосте.
Результат GZIP=10 байт + Data + 8 байт
Результат Compress=2 байта + Data + 4 байта
Может кто умную вещь скажет, как из второго получить первое? Или пнут в сторону расшифровки заголовков..
...
Рейтинг: 0 / 0
Compress, ZIP и т.п. в ASA9
    #34781051
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже нашел формат gzip'а http://www.ietf.org/rfc/rfc1952.txt. Буду "ковыряться".
...
Рейтинг: 0 / 0
Compress, ZIP и т.п. в ASA9
    #34781188
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь нужна еще функция на SQL для подсчета CRC. Штатных нет, может кто уже писал такую?
...
Рейтинг: 0 / 0
Compress, ZIP и т.п. в ASA9
    #34782028
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за суетливость, но уже сам все наваял...
Может кому пригодится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ALTER FUNCTION "DBA"."HEXTOUINT"(in s char( 8 ))
RETURNS unsigned int
DETERMINISTIC
BEGIN
    DECLARE "ret" unsigned int;
    DECLARE i int;
    set i=HEXTOINT(s);
    if i< 0  then
        set ret=0xFFFFFFFF + i +  1 ;
    else
        set ret=i;
    end if;
    RETURN "ret";
END

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
ALTER FUNCTION "DBA"."CRC32"(in b long binary)
RETURNS unsigned integer
DETERMINISTIC
BEGIN
    DECLARE fcs unsigned integer;
    DECLARE i unsigned integer;
    DECLARE s unsigned integer;
    DECLARE n unsigned integer;
    DECLARE k unsigned integer;
    declare fcstab char( 2048 );

    set fcstab='';
    set n= 0 ;
    while n< 256  loop
        set s = n;
        set k= 0 ;
        while k< 8  loop
            if s& 1 = 1  then
                set s=0xedb88320 ^ (s/ 2 );
            else
                set s=s/ 2 ;
            end if;
            set k=k+ 1 ;
        end loop;
        set fcstab = fcstab || right(INTTOHEX(s), 8 );
        set n=n+ 1 ;
    end loop;

    set s=length(b);

    set fcs= 0  ^ 0xFFFFFFFF;
    set i= 0 ;
    while i<s loop
      set fcs = (fcs / 256 ) ^ HEXTOUINT( substr(fcstab, 1 + 8 *((fcs ^ ascii(substr(b,i+ 1 , 1 ))) &  255 ), 8 ) );
      set i = i +  1 ;
    end loop;
    set fcs=fcs ^ 0xFFFFFFFF;
    RETURN "fcs";
END

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ALTER FUNCTION "DBA"."GZIP"(in s long varchar)
RETURNS long varchar
DETERMINISTIC
BEGIN
    DECLARE "ret" long varchar;
    declare crc_32 unsigned int;
    declare len unsigned int;
    
    set crc_32=CRC32(s);
    set len=length(s);

    set s=compress(s);
    set s=substr(s, 3 );
    set s=left(s,length(s) -  4 );

    set ret='\x1F\x8B\x08\x00\x00\x00\x00\x00\x00\x0B' || s;
    set ret=ret+char(mod(crc_32, 256 ))+char(mod(crc_32/ 256 , 256 ))+char(mod(crc_32/ 256 / 256 , 256 ))+char(crc_32/ 256 / 256 / 256 );
    set ret=ret+char(mod(len, 256 ))+char(mod(len/ 256 , 256 ))+char(mod(len/ 256 / 256 , 256 ))+char(len/ 256 / 256 / 256 );

    RETURN "ret";
END
...
Рейтинг: 0 / 0
Compress, ZIP и т.п. в ASA9
    #34783182
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все это конечно хорошо, но лучше оформить это в виде внешних функций и процедур, например под виндой в виде отдельной dll-ки и в самом ASA вызывать именно их, работать будет гораздо быстреее....
...
Рейтинг: 0 / 0
Compress, ZIP и т.п. в ASA9
    #34783337
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey OrlovВсе это конечно хорошо, но лучше оформить это в виде внешних функций и процедур, например под виндой в виде отдельной dll-ки и в самом ASA вызывать именно их, работать будет гораздо быстреее....

Да, да. Уже столкнулся с тормозами. Считать CRC на SQL - жесть. Нужно выносить в отдельную длл для АСА, чем собственно и занимаюсь.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Compress, ZIP и т.п. в ASA9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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