Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 8 9 [10] 11   вперед  Ctrl      все
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28259

Hello, Таблоид!
You wrote on 18 марта 2016 г. 15:11:49:

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

Posted via ActualForum NNTP Server 1.5

18 мар 16, 15:11    [18948715]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43647

Мимопроходящий
дык это глюк

+1
В трекер, не в доку.

Posted via ActualForum NNTP Server 1.5

18 мар 16, 15:15    [18948754]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Таблоид
Member

Откуда:
Сообщений: 9454
Блог
Сбацал.
18 мар 16, 16:41    [18949502]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Таблоид
Member

Откуда:
Сообщений: 9454
Блог
Не знаю, куда лучше добавить: в "Соединения именованными столбами" (стр. 254) или же в "Неоднозначные имена полей в соединениях" (стр. 258), но суть в следующем:
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.
3 апр 16, 15:08    [19011004]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Таблоид,

ИХМО неоднозначные поля в WHERE не должны допускаться.
3 апр 16, 15:15    [19011014]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Arioch
Member

Откуда:
Сообщений: 9084
Симонов Денис,

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

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

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

select 1 from t1 a join t2 b using(x) join t3 c using(x) 
- интересно, это отработает? с кем будут сервер связывать c.x - с a.x или с b.x ?
4 апр 16, 13:44    [19014246]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Arioch,

да я всё равно добавлю примечание. Впрочем там работы несколько побольше, ибо кое-какие исправления надо внести из английской версии, обновление которой недавно вышло. Просто высказал своё мнение
4 апр 16, 14:18    [19014448]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Таблоид
Member

Откуда:
Сообщений: 9454
Блог
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 (записанный именно так, без апострофов), и ничего более.
Например, нельзя делать так:
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' на '=' - всё прокатит ОК.
Надо бы добавить сиё в доку.
10 апр 16, 01:18    [19037869]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Таблоид,

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

Добавлю ссылку и эту оговорку в этом предикате сделаю.
10 апр 16, 12:07    [19038470]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Таблоид,

добавил примечание про IS и про USING. Кроме того перенёс некоторые улучшения из английской версии LR, самое главное из которых касается особенностей задания чисел в 16ричном виде
10 апр 16, 18:47    [19039202]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Поправил приоритет операторов так чтобы описание соответствовало текущему положению вещей.
Задуматься об этом заставил тикет CORE-5193

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

select not false = true is not unknown from rdb$database;


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

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

not false = true is not unknown

эквивалентно
not ((false = true) is not unknown) => not (false is not unknown) => not true => false


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

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

А что насчёт этого говорит стандарт?
12 апр 16, 14:41    [19047506]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43647
Симонов Денис
IS - это оператор сравнения

За стандарт не скажу, но http://www.tutorialspoint.com/sql/sql-operators.htm придерживается другого мнения.
12 апр 16, 15:18    [19047806]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Таблоид
Member

Откуда:
Сообщений: 9454
Блог
Dimitry Sibiryakov
http://www.tutorialspoint.com/sql/sql-operators.htm придерживается другого мнения.
Мну кажется, что у них нет мнения про 'IS', от слова "вообще" (см аттачик).

К сообщению приложен файл. Размер - 47Kb
12 апр 16, 15:48    [19048016]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Таблоид
Member

Откуда:
Сообщений: 9454
Блог
Симонов Денис
А что насчёт этого говорит стандарт?
А ничего не говорит: про это приоритеты boolean операций он как-то стыдливо помалкивает ;-)

К сообщению приложен файл. Размер - 112Kb
12 апр 16, 15:54    [19048059]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Таблоид,

моё ИХМО. 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, но не тройки.
12 апр 16, 16:04    [19048125]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Dimitry Sibiryakov,

тут кстати важно не куда, они отнесли оператор IS (я с ними не согласен, ибо логические операторы это те что делаются над логическими значениями, а не те что дают логический результат), а конкретно приоритет одного оператора над другим. Что у них не описано.
12 апр 16, 16:08    [19048159]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Arioch
Member

Откуда:
Сообщений: 9084
Симонов Денис
Что Адриано моментально сделал


он в трекере вроде ничего не делал, просто со всеми согласился, в основном с ПостГрессом :-)
12 апр 16, 16:14    [19048196]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
Arioch,

да ну. Fix Versions 4.0 Alpha видишь? Можешь ещё в GIT по четвёрке изменения посмотреть
12 апр 16, 16:19    [19048231]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Arioch
Member

Откуда:
Сообщений: 9084
Симонов Денис,

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

может быть вам стоит как-нибудь настроить https://marketplace.atlassian.com/plugins/com.xiplink.jira.git.jira_git_plugin/server/overview
12 апр 16, 16:25    [19048260]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6668
Arioch
может быть вам стоит как-нибудь настроить

портируй его на нашу версию JIRA сначала, умник...
12 апр 16, 19:10    [19049110]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1058
Стр. 20. "Вопросы, не связанные с SQL в данном документе не рассматриваются." Должно быть "Вопросы, не связанные с SQL, в данном документе не рассматриваются."

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

Стр. 22 "Оба языковых подмножества, как DSQL, так и PSQL полностью...". Надо "Оба языковых подмножества, как DSQL, так и PSQL, полностью...".
20 апр 16, 10:10    [19080768]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
документация обновлена
9 май 16, 20:32    [19150721]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
fb user
Guest
LR
ROUND...
Тип возвращаемого результата: INTEGER, масштабируемый BIGINT, DOUBLE PRECISION

Для ROUND(1.25, 0) тип NUMERIC(18, 2).
18 авг 16, 08:45    [19555462]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7286
fb user,

здесь нет противоречий
"масштабируемый BIGINT" это и есть NUMERIC(18, x), хотя возможно можно было бы написать NUMERIC(18, x). Подумаю на выходных
18 авг 16, 09:26    [19555580]     Ответить | Цитировать Сообщить модератору
 Re: ANN Руководство по языку SQL СУБД Firebird 3.0  [new]
fb user
Guest
Результат зависит от типа первого аргумента и наличия второго.
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


Из шаблона выпадает вот это:
ROUND(1.5), -- BIGINT
ROUND(1.5, 0), -- NUMERIC(18,1)
И обратите внимание на странность с типом выражения "1.5". Я попробовал кастовать его ко всем типам, но так и не получил BIGINT в качестве типа результата.

Hint: в IBExpert типы данных можно смотреть наведением мышки на заголовок или перейдя в режим формы.
18 авг 16, 11:28    [19556355]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 8 9 [10] 11   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить