summaryrefslogtreecommitdiffstats
path: root/library/cpp/neh/stat.cpp
diff options
context:
space:
mode:
authorflown4qqqq <[email protected]>2025-09-23 12:50:47 +0300
committerflown4qqqq <[email protected]>2025-09-23 13:05:39 +0300
commit02f803b5fcdd27b7865b981fd880e37c4e021b10 (patch)
treee9cb2fc31a023c65765172d54533affab661773f /library/cpp/neh/stat.cpp
parent97bc04c9b98bd85489e38c33b1edf386161c9c8f (diff)
The ability to specify not null, default, family in any order
Проблема в следующем. Есть запрос: ```sql CREATE TABLE series_with_families ( series_id Uint64, title Utf8, series_info Utf8  NOT NULL FAMILY family_large, release_date Uint64, PRIMARY KEY (series_id), FAMILY default ( DATA = "ssd", COMPRESSION = "off" ), FAMILY family_large ( DATA = "rot", COMPRESSION = "lz4" ) ); ``` Такой запрос является на данный момент неверным на уровне грамматики. Ругается на строку \``series_info Utf8  NOT NULL FAMILY family_large`\` Однако запрос, в котором NOT NULL и FAMILY поменяны местами, отрабатывает корректно: ```sql CREATE TABLE series_with_families ( series_id Uint64, title Utf8, series_info Utf8 FAMILY family_large NOT NULL, release_date Uint64, PRIMARY KEY (series_id), FAMILY default ( DATA = "ssd", COMPRESSION = "off" ), FAMILY family_large ( DATA = "rot", COMPRESSION = "lz4" ) ); ``` В этом Pull Request'е я меняю грамматику таким образом, чтобы была возможность задавать "опции" колонки (DEFAULT, NOT NULL, FAMILY). Особое внимание стоит обратить внимание на тест `CreateTableDefaultAndNotNullInOrderSpace`: в нем показывается, что можно использовать синтаксис ```sql CREATE TABLE tbl ( k Uint64, v Bool DEFAULT false NOT NULL, PRIMARY KEY (k) ); ``` И такое поведение означает именно DEFAULT (false NOT NULL), то есть DEFAULT true. Дело в том, что выражение "false NOT NULL" эквивалентно "false IS NOT NULL", что является, безусловно, истиной. Ровно для того, чтобы была вообще возможность одновременно указать и default, и not null, было добавлено расширение синтаксиса: теперь можно указывать скобки для указания опций столбца, а сами опции внутри них можно перечислять через запятую: ```sql CREATE TABLE tbl ( k Uint64, v Bool (DEFAULT false, NOT NULL), PRIMARY KEY (k) ); ``` Запрос выше означает, что столбец должен по умолчанию заполняться false'ами, но при этом он должен быть NOT NULL. commit_hash:67cc27a5fe6ae73f8725b051b232c2ca0d1ec54f
Diffstat (limited to 'library/cpp/neh/stat.cpp')
0 files changed, 0 insertions, 0 deletions