powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / operator overloading
7 сообщений из 7, страница 1 из 1
operator overloading
    #38708707
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется иметь возможность переопредлелить оператор "/", чтобы иметь возможность делить как в 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
operator overloading
    #38708719
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeчтобы иметь возможность делить как в mysql и delphi
переходи обратно на 1 диалект.

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

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

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

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

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

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


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