Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / operator overloading / 7 сообщений из 7, страница 1 из 1
30.07.2014, 09:28
    #38708707
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
operator overloading
Хочется иметь возможность переопредлелить оператор "/", чтобы иметь возможность делить как в mysql и delphi:
Код: sql
1.
2.
3.
4.
CREATE BINARY OPERATOR / (V1 INTEGER, V2 INTEGER) RETURNS DOUBLE PRECISION AS
BEGIN
  RETURN CAST(V1 AS DOUBLE PRECISION) / V2;
END


И с доменами, типа:
Код: 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.
CREATE DOMAIN TVector2D = VARCHAR(100);

CREATE BINARY OPERATOR + (V1 TVector2D, V2 TVector2D) RETURNS TVector2D AS
BEGIN
  RETURN SumVectors(V1, V2);
END

CREATE BINARY OPERATOR * (V1 TVector2D, V2 DOUBLE PRECISION) RETURNS TVector2D AS
BEGIN
  RETURN MulVector(V1, V2);
END

CREATE BINARY OPERATOR * (V1 TVector2D, V2 INTEGER) RETURNS TVector2D AS
BEGIN
  RETURN MulVector(V1, CAST(V2 AS DOUBLE PRECISION));
END

CREATE TABLE T(V1 TVector2D, V2 TVector2D);

INSERT INTO T(V1, V2) VALUES ('1.1, 2.2', '2.2, 1.1');

SELECT V1 + V2 FROM T
-- '3.3, 3.3'

SELECT V1 * 10 FROM T
-- '11, 22'

CREATE BINARY OPERATOR ^ (V1 INTEGER, V2 INTEGER) RETURNS DOUBLE PRECISION AS
BEGIN
  RETURN Power(V1, V2);
END

SELECT 2^16 FROM RDB$DATABASE
-- 65536

Переопределять на уровне БД.
...
Рейтинг: 0 / 0
30.07.2014, 09:38
    #38708719
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
operator overloading
NickDeeчтобы иметь возможность делить как в mysql и delphi
переходи обратно на 1 диалект.

Переопределение операторов в сад. Сделай себе функцию и дели как хочешь через неё.

По поводу привязки оператор к домену. Тоже в сад. Это если и делать то с полноценным объектными типами, которые появятся ещё очень не скоро.
...
Рейтинг: 0 / 0
30.07.2014, 11:27
    #38708881
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
operator overloading
Вот человек наступил: http://tracker.firebirdsql.org/browse/CORE-4502
Не он первый. Не он последний.
Имхо если бы в mysql оператор деления был по стандарту, то юзеры быстро бы замаялись кастовать делимое.
Для себя и своих пользователей я бы переопределил деление, чтобы оно соответствовало ожиданиям пользователей и не заставляло постоянно следить за типами и кастовать если вдруг что (или приписывать .0 к числу).
Я за математическое деление :)
...
Рейтинг: 0 / 0
30.07.2014, 11:40
    #38708905
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
operator overloading
NickDee,

что бы не наступать надо читать документацию. MySQL привык плевать на стандарт. В некоторых случаях приходится с ним работать. В эти моменты меня берёт злость, потому как всё через ж..у по своему. В конце концов кому не нравится есть 1 диалект.

Переопределение операторов очень мощная и в то же время очень опасная возможность. Не думаю что это стоит вводить на уровень базы данных и для простых типов. Вот если бы в FB была возможность вводить свои типы данных (это не есть домены), то для них можно.
...
Рейтинг: 0 / 0
30.07.2014, 11:41
    #38708906
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
operator overloading
NickDeeЯ за математическое деление :)
А я - за полное отсутствие деления на сервере.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.07.2014, 11:46
    #38708918
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
operator overloading
Hello, Dimitry Sibiryakov!
You wrote on 30 июля 2014 г. 11:44:46:

Dimitry SibiryakovNickDee> Я за математическое деление
:)> А я - за полное отсутствие деления на сервере.
предпочитаю отнимать.
и не делиться.

(с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.07.2014, 12:01
    #38708941
afgm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
operator overloading
Симонов ДенисПереопределение операторов очень мощная и в то же время очень опасная возможность. Не думаю что это стоит вводить на уровень базы данных и для простых типов. Вот если бы в FB была возможность вводить свои типы данных (это не есть домены), то для них можно.
Согласен. Вреда может быть больше чем пользы. Всю эту гибкость легко превратить в ад.
И ещё про implicit/explicit cast не забудь )
И вообще обработку операторов доверить внешнему подключаемому языку (Java, Python) и озадачиться только сериализацией в поля БД.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / operator overloading / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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