diff options
| author | flown4qqqq <[email protected]> | 2025-09-23 12:50:47 +0300 |
|---|---|---|
| committer | flown4qqqq <[email protected]> | 2025-09-23 13:05:39 +0300 |
| commit | 02f803b5fcdd27b7865b981fd880e37c4e021b10 (patch) | |
| tree | e9cb2fc31a023c65765172d54533affab661773f /library/cpp/neh/smart_ptr.cpp | |
| parent | 97bc04c9b98bd85489e38c33b1edf386161c9c8f (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/smart_ptr.cpp')
0 files changed, 0 insertions, 0 deletions
