blob: 42946a12e23acdee10407869afbf9798c11a37d5 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
= Grammar Reference
This section describes grammar elements that are common to multiple SQL functions (link:sql-reference/ddl[DDL], link:sql-reference/distribution-zones[Distribution Zones], etc.).
== column_definition_or_list
[.diagram-container]
Diagram(
Choice(0,
Sequence(
Choice(0,
Sequence(
Choice(0,Sequence(
NonTerminal('column_name'),
NonTerminal('data_type'))
)),
Sequence(
Terminal('('),
OneOrMore(Sequence(
NonTerminal('column_name'),
NonTerminal('data_type')),
Terminal(',')
),Terminal(')')
)))))
Keywords and parameters:
* `column_name` - a column name.
* `data_type` - a valid link:sql-reference/data-types[data type].
Referenced by:
* link:sql-reference/ddl#alter-table[ALTER TABLE]
'''
== column_name_or_list
[.diagram-container]
Diagram(
Choice(0,
Sequence(
Choice(0,
Sequence(
Choice(0,Sequence(
NonTerminal('column_name'))
)),
Sequence(
Terminal('('),
OneOrMore(Sequence(
NonTerminal('column_name')),
Terminal(',')
),Terminal(')')
)))))
Keywords and parameters:
* `column_name` - a column name.
Referenced by:
* link:sql-reference/ddl#create-table[CREATE TABLE]
* link:sql-reference/ddl#alter-table[ALTER TABLE]
* link:sql-reference/ddl#create-index[CREATE INDEX]
* <<constraint>>
'''
== sorted_column_list
[.diagram-container]
Diagram(
Sequence('(', OneOrMore(Sequence(NonTerminal('column_name'), Optional(Choice(0, Terminal('ASC'), Terminal('DESC')))), ','), ')')
)
Keywords and parameters:
* `column_name` - a column name.
Referenced by:
* link:sql-reference/ddl#create-index[CREATE INDEX]
* <<constraint>>
'''
== constraint
[.diagram-container]
Diagram(Sequence(
Optional(Sequence(Terminal('CONSTRAINT'),NonTerminal('constraint_name')
)),
Terminal('PRIMARY KEY'),
Optional(
Choice(0,
Sequence(
Terminal('USING'),
Choice (0,
Sequence(Terminal('SORTED'), NonTerminal('sorted_column_list', {href:'./grammar-reference/#sorted_column_list'})
),
Sequence('HASH', NonTerminal('column_list', {href:'./grammar-reference/#column_list'})))
))
)))
Keywords and parameters:
* `constraint_name` - a name of the constraint.
Referenced by:
* link:sql-reference/ddl#create-table[CREATE TABLE]
'''
== qualified_table_name
[.diagram-container]
Diagram(Sequence(
Optional(Sequence(NonTerminal('schema'),NonTerminal('.')
),),
NonTerminal('table_name')
),
)
Keywords and parameters:
* `schema` - a name of the table schema.
* `table_name` - a name of the table.
Referenced by:
* link:sql-reference/ddl#create-table[CREATE TABLE]
* link:sql-reference/ddl#alter-table[ALTER TABLE]
* link:sql-reference/ddl#drop-table[DROP TABLE]
* link:sql-reference/ddl#create-index[CREATE INDEX]
'''
== column_definition
[.diagram-container]
Diagram(
Sequence(
NonTerminal('column_name'),
NonTerminal('DATA TYPE', {href:'./data-types'}),
Optional(Sequence(Optional('NOT'),Terminal('NULL')))
),
End({type:'complex'})
)
[.diagram-container]
Diagram(
Start({type:'complex'}),
Sequence(
Optional(Sequence(Terminal('DEFAULT'), Choice(1,NonTerminal('identifier'),
NonTerminal('literal_value'),
Sequence(Terminal('CURRENT TIMESTAMP'), Optional(Sequence(Terminal('+'),Terminal('INTERVAL'), NonTerminal('interval')))
)
),)),
Optional(Terminal('PRIMARY KEY')),
))
Keywords and parameters:
* `column_name` - a column name.
* `DATA TYPE` - the link:sql-reference/data-types[data type] allowed in the column.
* `identifier` - the random identifier for the row. Can be generated by using the <<rand_uuid>> function.
* `literal_value` - a value to be assigned as default.
* `CURRENT TIMESTAMP` - the function that returns current time. Can only be used for `TIMESTAMP` columns.
* `interval` - the time interval by which the timestamp should be offset.
Referenced by:
* link:sql-reference/ddl#сreate-table[CREATE TABLE]
* link:sql-reference/ddl#alter-table[ALTER TABLE]
* link:sql-reference/ddl#create-index[CREATE INDEX]
* link:sql-reference/distribution-zones#create-zone[CREATE ZONE]
'''
== parameter
[.diagram-container]
Diagram(
NonTerminal('parameter_name'),
Terminal('='),
NonTerminal('parameter_value'))
Parameters:
* `parameter_name` - the name of the parameter.
* `parameter_value` - the value of the parameter.
When a parameter is specified, you can provide it as a literal value or as an identifier. For example:
----
CREATE ZONE test_zone;
CREATE TABLE test_table (id INT PRIMARY KEY, val INT) WITH PRIMARY_ZONE=test_zone;
----
In this case, `test_zone` is the identifier, and is used as an identifier. When used like this, the parameters are not case-sensitive.
----
CREATE ZONE "test_zone";
CREATE TABLE test_table (id INT PRIMARY KEY, val INT) WITH PRIMARY_ZONE='test_zone';
----
In this case, `test_zone` is created as a literal value, and is used as a literal. When used like this, the parameter is case-sensitive.
----
CREATE ZONE test_zone;
CREATE TABLE test_table (id INT PRIMARY KEY, val INT) WITH PRIMARY_ZONE=`TEST_ZONE`;
----
In this case, `test_zone` is created as an identifier, and is case-insensitive. As such, when `TEST_ZONE` is used as a literal, it still matches the identifier.
Referenced by:
* link:sql-reference/ddl#сreate-table[CREATE TABLE]
* link:sql-reference/distribution-zones#create-zone[CREATE ZONE]
* link:sql-reference/distribution-zones#alter-zone[ALTER ZONE]
'''
== System Functions
=== rand_uuid
This function generates a random UUID value each time it is called.
Example:
[source,sql]
----
CREATE TABLE t (id uuid default rand_uuid primary key, val int)
----
Referenced by:
* link:sql-reference/ddl#create-table[CREATE TABLE]