mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Merge pull request #29208 from olgarev/revolg-DOCSUP-12136-add_heredoc_syntax
Add new syntax heredoc
This commit is contained in:
commit
daee6054f8
@ -104,6 +104,28 @@ There are many nuances to processing `NULL`. For example, if at least one of the
|
||||
|
||||
In queries, you can check `NULL` using the [IS NULL](../sql-reference/operators/index.md#operator-is-null) and [IS NOT NULL](../sql-reference/operators/index.md) operators and the related functions `isNull` and `isNotNull`.
|
||||
|
||||
### Heredoc {#heredeoc}
|
||||
|
||||
A [heredoc](https://en.wikipedia.org/wiki/Here_document) is a way to define a string (often multiline), while maintaining the original formatting. A heredoc is defined as a custom string literal, placed between two `$` symbols, for example `$heredoc$`. A value between two heredocs is processed "as-is".
|
||||
|
||||
You can use a heredoc to embed snippets of SQL, HTML, or XML code, etc.
|
||||
|
||||
**Example**
|
||||
|
||||
Query:
|
||||
|
||||
```sql
|
||||
SELECT $smth$SHOW CREATE VIEW my_view$smth$;
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
```text
|
||||
┌─'SHOW CREATE VIEW my_view'─┐
|
||||
│ SHOW CREATE VIEW my_view │
|
||||
└────────────────────────────┘
|
||||
```
|
||||
|
||||
## Functions {#functions}
|
||||
|
||||
Function calls are written like an identifier with a list of arguments (possibly empty) in round brackets. In contrast to standard SQL, the brackets are required, even for an empty argument list. Example: `now()`.
|
||||
|
@ -3,7 +3,7 @@ toc_priority: 31
|
||||
toc_title: "Синтаксис"
|
||||
---
|
||||
|
||||
# Синтаксис {#sintaksis}
|
||||
# Синтаксис {#syntax}
|
||||
|
||||
В системе есть два вида парсеров: полноценный парсер SQL (recursive descent parser) и парсер форматов данных (быстрый потоковый парсер).
|
||||
Во всех случаях кроме запроса INSERT, используется только полноценный парсер SQL.
|
||||
@ -21,11 +21,11 @@ INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')
|
||||
|
||||
Далее пойдёт речь о полноценном парсере. О парсерах форматов, смотри раздел «Форматы».
|
||||
|
||||
## Пробелы {#probely}
|
||||
## Пробелы {#spaces}
|
||||
|
||||
Между синтаксическими конструкциями (в том числе, в начале и конце запроса) может быть расположено произвольное количество пробельных символов. К пробельным символам относятся пробел, таб, перевод строки, CR, form feed.
|
||||
|
||||
## Комментарии {#kommentarii}
|
||||
## Комментарии {#comments}
|
||||
|
||||
Поддерживаются комментарии в SQL-стиле и C-стиле.
|
||||
Комментарии в SQL-стиле: от `--` до конца строки. Пробел после `--` может не ставиться.
|
||||
@ -63,7 +63,7 @@ INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')
|
||||
|
||||
Существуют: числовые, строковые, составные литералы и `NULL`.
|
||||
|
||||
### Числовые {#chislovye}
|
||||
### Числовые {#numeric}
|
||||
|
||||
Числовой литерал пытается распарситься:
|
||||
|
||||
@ -83,7 +83,7 @@ INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')
|
||||
|
||||
Минимальный набор символов, которых вам необходимо экранировать в строковых литералах: `'` и `\`. Одинарная кавычка может быть экранирована одинарной кавычкой, литералы `'It\'s'` и `'It''s'` эквивалентны.
|
||||
|
||||
### Составные {#sostavnye}
|
||||
### Составные {#compound}
|
||||
|
||||
Поддерживаются конструкции для массивов: `[1, 2, 3]` и кортежей: `(1, 'Hello, world!', 2)`.
|
||||
На самом деле, это вовсе не литералы, а выражение с оператором создания массива и оператором создания кортежа, соответственно.
|
||||
@ -102,17 +102,39 @@ INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')
|
||||
|
||||
В запросах можно проверить `NULL` с помощью операторов [IS NULL](operators/index.md#operator-is-null) и [IS NOT NULL](operators/index.md), а также соответствующих функций `isNull` и `isNotNull`.
|
||||
|
||||
## Функции {#funktsii}
|
||||
### Heredoc {#heredeoc}
|
||||
|
||||
Синтаксис [heredoc](https://ru.wikipedia.org/wiki/Heredoc-синтаксис) — это способ определения строк с сохранением исходного формата (часто с переносом строки). `Heredoc` задается как произвольный строковый литерал между двумя символами `$`, например `$heredoc$`. Значение между двумя `heredoc` обрабатывается "как есть".
|
||||
|
||||
Синтаксис `heredoc` часто используют для вставки кусков кода SQL, HTML, XML и т.п.
|
||||
|
||||
**Пример**
|
||||
|
||||
Запрос:
|
||||
|
||||
```sql
|
||||
SELECT $smth$SHOW CREATE VIEW my_view$smth$;
|
||||
```
|
||||
|
||||
Результат:
|
||||
|
||||
```text
|
||||
┌─'SHOW CREATE VIEW my_view'─┐
|
||||
│ SHOW CREATE VIEW my_view │
|
||||
└────────────────────────────┘
|
||||
```
|
||||
|
||||
## Функции {#functions}
|
||||
|
||||
Функции записываются как идентификатор со списком аргументов (возможно, пустым) в скобках. В отличие от стандартного SQL, даже в случае пустого списка аргументов, скобки обязательны. Пример: `now()`.
|
||||
Бывают обычные и агрегатные функции (смотрите раздел «Агрегатные функции»). Некоторые агрегатные функции могут содержать два списка аргументов в круглых скобках. Пример: `quantile(0.9)(x)`. Такие агрегатные функции называются «параметрическими», а первый список аргументов называется «параметрами». Синтаксис агрегатных функций без параметров ничем не отличается от обычных функций.
|
||||
|
||||
## Операторы {#operatory}
|
||||
## Операторы {#operators}
|
||||
|
||||
Операторы преобразуются в соответствующие им функции во время парсинга запроса, с учётом их приоритета и ассоциативности.
|
||||
Например, выражение `1 + 2 * 3 + 4` преобразуется в `plus(plus(1, multiply(2, 3)), 4)`.
|
||||
|
||||
## Типы данных и движки таблиц {#tipy-dannykh-i-dvizhki-tablits}
|
||||
## Типы данных и движки таблиц {#data_types-and-database-table-engines}
|
||||
|
||||
Типы данных и движки таблиц в запросе `CREATE` записываются также, как идентификаторы или также как функции. То есть, могут содержать или не содержать список аргументов в круглых скобках. Подробнее смотрите разделы «Типы данных», «Движки таблиц», «CREATE».
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user