Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 3601 - mchar=mvarchar -- ERROR: could not find member 1(416621,416621) of opfamily 416784   Make a simular bug
Summary: mchar=mvarchar -- ERROR: could not find member 1(416621,416621) of opfamily 4...
Status: CLOSED FIXED
Alias: None
Product: Postgres@Etersoft
Classification: Продукты (Products)
Component: выполнение запросов (show other bugs)
Version: не указана
Hardware: PC All
: P4 critical
Target Milestone: ---
Assignee: Станислав Коробейников
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on: 4460
Blocks: 3247
  Show dependency treegraph
 
In work:
Reported: 2009-03-04 14:02 MSK by Станислав Коробейников
Modified: 2010-04-15 13:06 MSD (History)
3 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Станислав Коробейников 2009-03-04 14:02:51 MSK
Можно воспроизвести так(должны быть 1с-ные функции):
CREATE TABLE a (mchar2 MCHAR(2) NOT NULL);
CREATE TABLE c (mvarchar255 mvarchar NOT NULL);
SELECT * 
FROM a, c 
WHERE mchar2 = mvarchar255;
ошибка:
ERROR: could not find member 1(416621,416621) of opfamily 416784

Вот так все работает:
SELECT *
FROM (SELECT 'a  '::mchar(2) as mchar2) as a ,  (SELECT 'a '::mvarchar as mvarchar255) as b 
WHERE mchar2 = mvarchar255;
Comment 1 Станислав Коробейников 2009-03-04 14:12:10 MSK
Тоже самое в postgre c char и varchar работает, в MSSQL (n)char и (n)varchar тоже работает. 
Comment 2 Станислав Коробейников 2009-03-04 15:43:17 MSK
В 8.2.12 тоже самое работает. 
Comment 3 Станислав Коробейников 2009-03-10 12:29:16 MSK
Можно переопределить функции сравнения(mchar с mvarchar) mv_mc_icase_eq и mc_mv_icase_eq. И сделать приведение к mvarchar'у перед сравнением. 
Попробывал работает. 
Думаю, пока так и надо сделать. 

Вот такая функция должнга быть:
CREATE OR REPLACE FUNCTION mv_mc_icase_eq(b mvarchar, a mchar )
  RETURNS boolean AS
  $BODY$
  begin
	return (a::mvarchar = b);
  end
  $BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION mv_mc_icase_eq(b mvarchar, a mchar ) OWNER TO postgres;
и аналогичная mc_mv_icase_eq(a mchar, b mvarchar)
Comment 4 Vitaly Lipatov 2009-12-24 13:38:41 MSK
Ну так что, проблемы нет на новых PG 8.3.9 и 8.4.1?
Comment 5 Калюхович Юрий 2009-12-28 12:48:59 MSK
(In reply to comment #4)
> Ну так что, проблемы нет на новых PG 8.3.9 и 8.4.1?
> 

пробовал на 8.3.9 и на 8.4.1, база инициализировалась последней сельтой (1.0.7),тестовый запрос
CREATE TABLE a (mchar2 MCHAR(2) NOT NULL);
CREATE TABLE c (mvarchar255 mvarchar NOT NULL);
SELECT * 
FROM a, c 
WHERE mchar2 = mvarchar255;
ошибок не выявлено, можно закрыть багу, как я понимаю