powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ANN Руководство по языку SQL СУБД Firebird 3.0
25 сообщений из 345, страница 10 из 14
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39195477
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Таблоид!
You wrote on 18 марта 2016 г. 15:11:49:

Таблоид> только так прокатитдык это глюк

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39195482
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийдык это глюк
+1
В трекер, не в доку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39195578
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39206858
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, куда лучше добавить: в "Соединения именованными столбами" (стр. 254) или же в "Неоднозначные имена полей в соединениях" (стр. 258), но суть в следующем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> recreate table t1(x int unique);
SQL> recreate table t2(x int unique);
SQL> set plan on;
SQL> select 1 from t1 a join t2 b on a.x=b.x where x = 0;
Statement failed, SQLSTATE = 42702
Dynamic SQL Error
-SQL error code = -204
-Ambiguous field name between table T2 and table T1
-X
 /* да, так и должно быть*/ 

SQL> select 1 from t1 a join t2 b using(x) where x = 0;
PLAN JOIN (A NATURAL, B INDEX (RDB$2))
 /* :::NB::: здесь будет NATURAL по одной из таблиц, хотя наверняка ожидалось  PLAN JOIN (A INDEX (...), B INDEX (...))*/ 

SQL> select 1 from t1 a join t2 b using(x) where  a. x = 0; -- или ' b. x'
PLAN JOIN (A INDEX (RDB$1), B INDEX (RDB$2))
/* ожидался, вероятно,  именно этот план - см тж след. запрос */

SQL> select 1 from t1 a join t2 b using(x) where b.x = 0;
PLAN JOIN (A INDEX (RDB$1), B INDEX (RDB$2))

ИТОГО: граждане, будьте бдительны. Если юзаете using-способ соединения, то в where-секции столбы надо всё равно снабжать префиксами, если не хотите вдруг натуралов :-)

Объяснение смотрим тут: http://tracker.firebirdsql.org/browse/CORE-5040 (dimitr, 03/Apr/16 10:49 AM).

2 Денис : добавь, плз, в виде примера-предупреждалки в доку как по 3.0 так и по 2.5.
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39206861
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

ИХМО неоднозначные поля в WHERE не должны допускаться.
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39207505
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

так в случае "using(x)" они перестали быть неоднозначными

разумеется если не ввести в запрос третью таблицу ,в колторой ТОЖЕ есть столбец x

кстати, о третьей таблице ( с идентичным первым двум определением )...

Код: sql
1.
select 1 from t1 a join t2 b using(x) join t3 c using(x) 

- интересно, это отработает? с кем будут сервер связывать c.x - с a.x или с b.x ?
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39207545
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

да я всё равно добавлю примечание. Впрочем там работы несколько побольше, ибо кое-какие исправления надо внести из английской версии, обновление которой недавно вышло. Просто высказал своё мнение
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39211816
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Boolean, pg 41Предикаты могут использовать оператор IS [NOT] для проверки соответствия. Например, field1
IS FALSE или field1 IS NOT TRUE
.
Примечание
• Представлен в API типом FB_BOOLEAN и константами FB_TRUE и FB_FALSE;
• Операторы эквивалентности ( =, !=, <> и др.) допустимы во всех сравнениях;
• Значение TRUE больше чем FALSE;
. . .Оператор 'IS', в отличие от "=", весьма привередлив: ему надо, чтобы сразу после него был только литерал TRUE | FALSE | UNKNOWN (записанный именно так, без апострофов), и ничего более.
Например, нельзя делать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select false is  ' true '  from rdb$database;
Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 17
-'true'

select false is  ( true )  from rdb$database;
Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 17
-(

А вот с заменой 'IS' на '=' - всё прокатит ОК.
Надо бы добавить сиё в доку.
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39211877
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

я похоже забыл там ссылку добавить на описание предиката IS (Общие элементы языка/Предикаты/Другие предикаты сравнения/IS p. 80)

Добавлю ссылку и эту оговорку в этом предикате сделаю.
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39211989
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

добавил примечание про IS и про USING. Кроме того перенёс некоторые улучшения из английской версии LR, самое главное из которых касается особенностей задания чисел в 16ричном виде
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213675
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправил приоритет операторов так чтобы описание соответствовало текущему положению вещей.
Задуматься об этом заставил тикет CORE-5193

Итак какой ответ должен быть

Код: sql
1.
select not false = true is not unknown from rdb$database;



Согласно текущему приоритету по типам операторов:
1. Конкатенация
2. Арифметические
3. Сравнения
4. Логические

IS - это оператор сравнения, поэтому

Код: sql
1.
not false = true is not unknown


эквивалентно
Код: sql
1.
not ((false = true) is not unknown) => not (false is not unknown) => not true => false



Я предположил, что оператор IS должен обладать большим приоритетом, чем =, а потому
Код: sql
1.
not (false = (true is not unknown)) => not (false = true) => not false => true


Что Адриано моментально сделал. А вот теперь я сомневаюсь.

А что насчёт этого говорит стандарт?
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213746
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисIS - это оператор сравнения
За стандарт не скажу, но http://www.tutorialspoint.com/sql/sql-operators.htm придерживается другого мнения.
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213799
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov http://www.tutorialspoint.com/sql/sql-operators.htm придерживается другого мнения.Мну кажется, что у них нет мнения про 'IS', от слова "вообще" (см аттачик).
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213810
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисА что насчёт этого говорит стандарт?А ничего не говорит: про это приоритеты boolean операций он как-то стыдливо помалкивает ;-)
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213818
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

моё ИХМО. IS это один и тот же оператор что для BOOLEAN, что для проверки NULL.

В том же тикете я привёл как это сделано в PG. Сначала у них было так
http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-PRECEDENCE-TABLE
потом с какого-то перепугу они изменили вот так
http://www.postgresql.org/docs/9.5/static/sql-syntax-lexical.html#SQL-PRECEDENCE-TABLE

Причём Адриано тоже соосторожничал. Фикс применил только для FB4, но не тройки.
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213828
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

тут кстати важно не куда, они отнесли оператор IS (я с ними не согласен, ибо логические операторы это те что делаются над логическими значениями, а не те что дают логический результат), а конкретно приоритет одного оператора над другим. Что у них не описано.
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213842
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЧто Адриано моментально сделал

он в трекере вроде ничего не делал, просто со всеми согласился, в основном с ПостГрессом :-)
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213853
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

да ну. Fix Versions 4.0 Alpha видишь? Можешь ещё в GIT по четвёрке изменения посмотреть
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39213861
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ну я на вкладку commits заглянул - там пусто было

может быть вам стоит как-нибудь настроить https://marketplace.atlassian.com/plugins/com.xiplink.jira.git.jira_git_plugin/server/overview
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39214038
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochможет быть вам стоит как-нибудь настроить
портируй его на нашу версию JIRA сначала, умник...
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39219863
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стр. 20. "Вопросы, не связанные с SQL в данном документе не рассматриваются." Должно быть "Вопросы, не связанные с SQL, в данном документе не рассматриваются."

Стр. 20.
"Симонов Денис;
• Винкенуг Пол;
• Дмитрий Филиппов;
• Дмитрий Еманов;"
Почему у Винкенуга и Симонова сначала фамилия, потом имя, а у всех остальных сначала имя, потом фамилия?

Стр. 22 "Оба языковых подмножества, как DSQL, так и PSQL полностью...". Надо "Оба языковых подмножества, как DSQL, так и PSQL, полностью...".
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39231953
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
документация обновлена
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39293674
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR ROUND ...
Тип возвращаемого результата: INTEGER, масштабируемый BIGINT, DOUBLE PRECISION
Для ROUND(1.25, 0) тип NUMERIC(18, 2).
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39293705
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fb user,

здесь нет противоречий
"масштабируемый BIGINT" это и есть NUMERIC(18, x), хотя возможно можно было бы написать NUMERIC(18, x). Подумаю на выходных
...
Рейтинг: 0 / 0
ANN Руководство по языку SQL СУБД Firebird 3.0
    #39293791
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Результат зависит от типа первого аргумента и наличия второго.
Код: 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.
SELECT

ROUND(1), -- INTEGER
ROUND(1,0), -- INTEGER

ROUND(4000000000), -- BIGINT
ROUND(4000000000,0), -- BIGINT

ROUND(CAST(1 AS SMALLINT)), -- SMALLINT
ROUND(CAST(1 AS SMALLINT), 0), -- SMALLINT

ROUND(CAST(1 AS INTEGER)),  -- INTEGER
ROUND(CAST(1 AS INTEGER), 0),  -- INTEGER

ROUND(CAST(1 AS BIGINT)),   -- BIGINT
ROUND(CAST(1 AS BIGINT), 0),   -- BIGINT

ROUND(1.5), -- BIGINT
ROUND(1.5, 0), -- NUMERIC(18,1)

ROUND(CAST(1.5 AS FLOAT)),  -- FLOAT
ROUND(CAST(1.5 AS FLOAT), 0),  -- FLOAT

ROUND(CAST(1.5 AS DOUBLE PRECISION)), -- DOUBLE PRECISION
ROUND(CAST(1.5 AS DOUBLE PRECISION), 0), -- DOUBLE PRECISION

ROUND(CAST(1.5 AS NUMERIC(1,1))),  -- NUMERIC(4,0)
ROUND(CAST(1.5 AS NUMERIC(1,1)), 0),  -- NUMERIC(4,1)

ROUND(CAST(1.5 AS NUMERIC(5,1))),  -- NUMERIC(9,0)
ROUND(CAST(1.5 AS NUMERIC(5,1)), 0),  -- NUMERIC(9,1)

ROUND(CAST(1.5 AS NUMERIC(10,1))), -- NUMERIC(18,0)
ROUND(CAST(1.5 AS NUMERIC(10,1)), 0), -- NUMERIC(18,1)

ROUND(CAST(1.5 AS DECIMAL(1,1))),  -- DECIMAL(9!,0)
ROUND(CAST(1.5 AS DECIMAL(1,1)), 0),  -- DECIMAL(9!,1)

ROUND(CAST(1.5 AS DECIMAL(5,1))),  -- DECIMAL(9,0)
ROUND(CAST(1.5 AS DECIMAL(5,1)), 0),  -- DECIMAL(9,1)

ROUND(CAST(1.5 AS DECIMAL(10,1))),  -- DECIMAL(18,0)
ROUND(CAST(1.5 AS DECIMAL(10,1)), 0)  -- DECIMAL(18,1)

FROM RDB$DATABASE



Из шаблона выпадает вот это:
Код: sql
1.
2.
ROUND(1.5), -- BIGINT
ROUND(1.5, 0), -- NUMERIC(18,1)

И обратите внимание на странность с типом выражения "1.5". Я попробовал кастовать его ко всем типам, но так и не получил BIGINT в качестве типа результата.

Hint: в IBExpert типы данных можно смотреть наведением мышки на заголовок или перейдя в режим формы.
...
Рейтинг: 0 / 0
25 сообщений из 345, страница 10 из 14
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ANN Руководство по языку SQL СУБД Firebird 3.0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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