Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / компарер, бага / 20 сообщений из 20, страница 1 из 1
09.10.2017, 11:55
    #39533306
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
имеется вот такая табличка:
Код: sql
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.
CREATE GLOBAL TEMPORARY TABLE BH_BOOK_BUY_MERGE_GTT (
    ID                  NUMERIC(18,0) NOT NULL,
    NUM                 INTEGER NOT NULL,
    TYPE_DOK            INTEGER,
    DATAP               DATE,
    KOD_OPER            VCH_50 /* VCH_50 = VARCHAR(50) */,
    NUM_DATE_SHF        VARCHAR(100),
    NUM_DATE_SHF_ISP    VARCHAR(100),
    NUM_DATE_SHFC       VARCHAR(100),
    NUM_DATE_SHFC_ISP   VARCHAR(100),
    NUM_DATE_SHF_NALOG  VARCHAR(100),
    NAME_SPKL           VARCHAR(150),
    INN_KPP             VARCHAR(50),
    SALE_NAME           VARCHAR(100),
    SALE_INN_KPP        VARCHAR(50),
    NUM_TD              VARCHAR(100),
    KOD_VALUTA          VARCHAR(50),
    STT                 NUMERIC(15,2),
    SUM_NDS             NUMERIC(15,2),
    SPKL                NUMERIC(18,0) NOT NULL,
    TIP_KL              NUMERIC(18,0) NOT NULL,
    PTIP_KL             NUMERIC(18,0) NOT NULL,
    IS_GNI              INTEGER NOT NULL,
    DATE_GET_UCHET      VARCHAR(100)
) ON COMMIT DELETE ROWS;



хотя по идее для проблемы будет достаточно и такой:
Код: sql
1.
2.
3.
CREATE GLOBAL TEMPORARY TABLE BH_BOOK_BUY_MERGE_GTT (
    DATE_GET_UCHET      VARCHAR(100)
) ON COMMIT DELETE ROWS;



Визуально в скрипте одинаково выглядят, что источник, что назначение, но если приглядеться на приложенной картинке видна разница и скрипт генерируется вот такой:

Код: sql
1.
2.
ALTER DOMAIN RDB$64157
  TYPE VARCHAR(100) CHARACTER SET NONE CHARACTER SET NONE;


И, вестимо, орет об ошибке.
...
Рейтинг: 0 / 0
09.10.2017, 12:07
    #39533319
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
FB 3 сборка 32794, базы на одном сервере, эксперт скачивал сегодня версия 2017,10,3,1.
...
Рейтинг: 0 / 0
11.10.2017, 11:11
    #39534502
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Прикольно. А дефолтовые коллейты в базах разные что-ли?
...
Рейтинг: 0 / 0
11.10.2017, 12:07
    #39534545
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
одинаковые, вин1251. Обе базы были недавно отресторены из 2.5 (каждая из своего GBK, метаданные в них должны быть одинаковыми, данные немного разнятся), таблиц там чутка за тысячу, косяк вылез на одном поле одной таблицы, все остальные без запинок, компарер не пытался массово ровнять коллейты.

Для проверки создал в обеих базах по варчар полю, без указания чарсетов-коллейтов, оба создались с win1251/win1251
...
Рейтинг: 0 / 0
11.10.2017, 13:56
    #39534675
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Однако же записи в RDB$FIELDS для этих доменов различаются в части коллейта, судя по скриншотам. Вот и хотелось бы знать, в чем именно там разница. Если я просто создам две базы с таблицей по твоему скрипту - разницы, очевидно, не будет никакой. И, соответственно, компарер ничего не найдет.
...
Рейтинг: 0 / 0
11.10.2017, 14:26
    #39534718
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
заглянул в источник
select r.rdb$field_name, r.rdb$collation_id from rdb$fields r where r.rdb$field_name = 'RDB$90619'
там rdb$collation_id 0

заглянул в назначение
select r.rdb$field_name, r.rdb$collation_id from rdb$fields r where r.rdb$field_name = 'RDB$64157'
там rdb$collation_id null

в остальных полях ничего интересного не нашлось (на мой взгляд).

Если чего надо для прояснения картины ты скажи, нарою что скажешь.
...
Рейтинг: 0 / 0
11.10.2017, 15:20
    #39534777
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Да пока достаточно. NULL в rdb$collation_id - явная неожиданность для компарера.
Завтра попробую воспроизвести.
...
Рейтинг: 0 / 0
11.10.2017, 16:20
    #39534822
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Провел тут еще изыскания, оказалось, что в основной рабочей базе (фб 2.5) это поле win1251 и чарсет и коллейт, а вот в базе второй ноды кластера тоже на фб2.5 оно описано уже как VARCHAR(100) CHARACTER SET NONE COLLATE NONE, по какой-то причине старый компарер (используется твоя либа, только граф обвязка своя) это безобразие не заровнял, новый ровняет правильно: ALTER DOMAIN RDB$90619 TYPE VARCHAR(100) CHARACTER SET WIN1251; Но после того, как обе базы прошли бэкап/рестор чарсет NONE сгинул и поселился null ставший неожиданностью для эксперта.
Вопрос почему сгинул NONE при миграции Б/Р с двойки на трешку похоже надо писать трекеру файрберда, попробую сделать тесткейз.
А вот что делать с null-ом в коллейте похоже таки к тебе.
Насколько я могу судить NULL в коллейте возник не от ручной правки системных таблиц.
...
Рейтинг: 0 / 0
11.10.2017, 16:42
    #39534843
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Ivan_Pisarevskyновый ровняет правильно: ALTER DOMAIN RDB$90619 TYPE VARCHAR(100) CHARACTER SET WIN1251

Что-то ты меня запутал... У тебя вон выше явно некорректный ALTER с двумя CHARACTER SET нарисован. И в скриншотах никакого NONE нет. Так кто на ком стоял кто правильно ровняет?
...
Рейтинг: 0 / 0
11.10.2017, 16:57
    #39534859
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Есть 2 исходных базы фб2.5 и фб2.5 они в работе.
Далее обе эти базы я прогоняю через штатный бэкап-рестор и получаю пару уже троешных баз.
На свежеотресторенные базы натравливаю компарер и получаю указанный в первом посте некорректный стэйтмент.

После того, как ты говоришь что нулл там неожидан, я пытаюсь понять как же он там возник?
Беру исходные базы до рестора и исследую, результат исследования выше, в частности пробую скомпарить исходные быза компарером из состава свежескачанного эксперта.
...
Рейтинг: 0 / 0
11.10.2017, 17:01
    #39534864
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
IBExpertИ в скриншотах никакого NONE нет.NONE сгинул в процессе миграции, скриншоты от трешки.
...
Рейтинг: 0 / 0
11.10.2017, 17:05
    #39534867
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
вот так было в 2.5 до рестора
...
Рейтинг: 0 / 0
11.10.2017, 17:41
    #39534899
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
создаю базу, таблицу и поле

/******************************************************************************/
/*** Generated by IBExpert 2017.10.3.1 11.10.2017 17:11:51 ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1251;

CREATE DATABASE 'test.gdb'
USER 'SYSDBA' password 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET WIN1251 COLLATION WIN1251;

CREATE GLOBAL TEMPORARY TABLE BH_BOOK_BUY_MERGE_GTT (
DATE_GET_UCHET VARCHAR(100) CHARACTER SET NONE
) ON COMMIT DELETE ROWS;

Далее открываю эксперт и правлю чарсет (мышекликами), под капотом оно делает это:

update RDB$FIELDS set
RDB$CHARACTER_SET_ID = 52
where RDB$FIELD_NAME = 'RDB$1'

привет null в коллейте.


В общем откуда null более менее ясно, а вот куда делся NONE пока загадка, воспроизвести не получается.
...
Рейтинг: 0 / 0
12.10.2017, 04:08
    #39535121
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
С NULL в RDB$COLLATION_ID я погорячился - это нормально.
В общем, воспроизвести не удалось. Сделал две базы с твоей таблицей, добился картинок как на первом скриншоте - компарер ничего не находит. Откуда он NONE в твоем случае взял - совершенно непонятно.
...
Рейтинг: 0 / 0
12.10.2017, 10:57
    #39535236
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
в принципе базы под рукой обе пока, только весят больше 50 гиг каждая... попробую оставить одну таблицу и сделать б/р, чтоб были пригодны послать почтой.
...
Рейтинг: 0 / 0
23.10.2017, 15:05
    #39540536
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
приготовить воспроизводимый пример приемлемого размера так и не удалось, после бэкап-ресторов оно ёк и все чинно-благородно. Если будут рецидивы, то стучаться буду сразу с воспроизводимым примером, чтоб попусту воздух не сотрясать.
...
Рейтинг: 0 / 0
10.11.2017, 07:40
    #39550653
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Привет, Александр!

создаем табличку и навешиваем на нее триггер.
В итоге эксперт генерирует скрипт ниже, оставил в нем только интересные части.
Суть: в триггере есть конструкция update or insert без кляузы matching а создание ПК идет после триггера в итоге облом-с.
Надо бы ПК создать пораньше.

Спасибо.

Код: sql
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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
SET NAMES WIN1251;

SET SQL DIALECT 3;

CONNECT 'сервер/порт:/база.gdb' USER 'SYSDBA' PASSWORD '*******';

SET AUTODDL ON;

/******************************************************************************/
/****              Creating tables (without computed fields)               ****/
/******************************************************************************/
CREATE TABLE USERS_CODE_FILIAL (
    USERS NUMERIC(18) NOT NULL,
    CODE_FILIAL VARCHAR(10) DEFAULT '' NOT NULL /* COLLATE WIN1251 - default */,
    TIMEP TIMESTAMP DEFAULT current_timestamp NOT NULL);


/******************************************************************************/
/****                          Creating triggers                           ****/
/******************************************************************************/
SET TERM ^ ;


CREATE TRIGGER TAI_USERS_LOG_CODE_FILIAL FOR USERS_LOG
INACTIVE
AFTER INSERT
POSITION 0 
AS
declare variable code_filial varchar(10);
declare variable id_users numeric(18,0);
begin
  if (user <> 'REPLICATOR') then
  begin
    select c.code_filial
      from config c
      into :code_filial;
    for select u.id
      from users u
      where u.login = current_user
      into :id_users
    do begin
      if (not exists (select uf.users
                        from users_code_filial uf
                        where uf.users = :id_users
                          and uf.code_filial = :code_filial)) then
      begin
        update or insert into users_code_filial(users, code_filial) values(:id_users, :code_filial);
      end
    end
  end
end
^

CREATE TRIGGER TAU_USERS_LOG_CODE_FILIAL FOR USERS_LOG
INACTIVE
AFTER UPDATE
POSITION 0 
AS
declare variable code_filial varchar(10);
declare variable id_users numeric(18,0);
begin
  if (user <> 'REPLICATOR') then
  begin
    select c.code_filial
      from config c
      into :code_filial;
    for select u.id
      from users u
      where u.login = current_user
      into :id_users
    do begin
      if (not exists (select uf.users
                        from users_code_filial uf
                        where uf.users = :id_users
                          and uf.code_filial = :code_filial)) then
      begin
        update or insert into users_code_filial(users, code_filial) values(:id_users, :code_filial);
      end
    end
  end
end
^


/******************************************************************************/
/****                   Creating primary key constraints                   ****/
/******************************************************************************/
SET TERM ; ^

RECONNECT;

ALTER TABLE USERS_CODE_FILIAL ADD CONSTRAINT PK_USERS_CODE_FILIAL PRIMARY KEY (USERS);


/******************************************************************************/
/****                     Granting missing privileges                      ****/
/******************************************************************************/

...
Рейтинг: 0 / 0
12.11.2017, 06:01
    #39551632
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Исправил.
...
Рейтинг: 0 / 0
12.11.2017, 22:59
    #39551862
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Спасибо!

ДЛЛ-ку за компанию обнови, пожалуйста.
...
Рейтинг: 0 / 0
13.11.2017, 10:23
    #39552000
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
компарер, бага
Обновил все.
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / компарер, бага / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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