定義
表記規則
CQL構文を指定するために、このドキュメントでは次の表記規則を使用します。
-
言語規則は、非公式なBNFバリアント表記で記述されます。特に、角括弧(
[ item ]
)は省略可能な項目、*
と+
は繰り返し項目(+
は少なくとも1つを意味します)に使用します。 -
この文法では、便宜上、非終端記号を小文字で(そしてそれらの定義へのリンクで)、終端キーワードを「すべて大文字」で記述します。ただし、キーワードは
識別子
であり、実際には大文字と小文字が区別されません。正規表現を使用していくつかの初期構文を定義することもあり、その場合はre(<some regular expression>)
で示します。 -
この文法はドキュメント作成の目的で提供されており、些細な詳細を省略しています。たとえば、
CREATE TABLE
文の最後の列定義のコンマはオプションですが、存在する場合はサポートされます(このドキュメントの文法ではそうは示されていません)。また、この文法で受け入れられるものがすべて有効なCQLであるとは限りません。 -
本文中のキーワードまたはCQLコードの部分への参照は、
等幅フォント
で表示されます。
識別子とキーワード
CQL言語は、テーブル、列、その他のオブジェクトを識別するために識別子(または名前)を使用します。識別子は、正規表現[a-zA-Z][a-zA-Z0-9_]*
に一致するトークンです。
SELECT
やWITH
など、そのような識別子のいくつかはキーワードです。これらは言語に対して固定された意味を持ち、ほとんどは予約されています。これらのキーワードのリストは、付録Aにあります。
識別子と(引用符なしの)キーワードは大文字と小文字が区別されません。したがって、SELECT
はselect
またはsElEcT
と同じであり、myId
はmyid
またはMYID
と同じです。よく使用される規則(特にこのドキュメントのサンプルによって)は、キーワードに大文字を使用し、その他の識別子に小文字を使用することです。
二重引用符("
)で任意の文字列(空ではない)を囲むことで定義される、引用符付き識別子と呼ばれる2番目の種類の識別子があります。引用符付き識別子は決してキーワードではありません。したがって、"select"
は予約キーワードではなく、列を参照するために使用できます(ただし、これは特に推奨されません)。一方、select
は構文エラーが発生します。また、引用符なしの識別子やキーワードとは異なり、引用符付き識別子は大文字と小文字が区別されます("My Quoted Id"
は"my quoted id"
とは異なります)。ただし、[a-zA-Z][a-zA-Z0-9_]*
に一致するすべて小文字の引用符付き識別子は、二重引用符を削除することで得られる引用符なしの識別子と等価です(そのため、"myid"
はmyid
とmyId
と等価ですが、"myId"
とは異なります)。引用符付き識別子の内部では、二重引用符文字を繰り返してエスケープできます。そのため、"foo "" bar"
は有効な識別子です。
引用符付き識別子は、任意の名前の列を宣言でき、これらはサーバーで使用される特定の名前と衝突することがあります。たとえば、条件付き更新を使用する場合、サーバーは |
より正式には、次のようになります。
identifier::= unquoted_identifier | quoted_identifier
unquoted_identifier::= re('[a-zA-Z][link:[a-zA-Z0-9]]*')
quoted_identifier::= '"' (any character where " can appear if doubled)+ '"'
定数
CQLは次の定数を定義します。
constant::= string | integer | float | boolean | uuid | blob | NULL
string::= ''' (any character where ' can appear if doubled)+ ''' : '$$' (any character other than '$$') '$$'
integer::= re('-?[0-9]+')
float::= re('-?[0-9]+(.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY
boolean::= TRUE | FALSE
uuid::= hex\{8}-hex\{4}-hex\{4}-hex\{4}-hex\{12}
hex::= re("[0-9a-fA-F]")
blob::= '0' ('x' | 'X') hex+
言い換えれば
-
文字列定数は、シングルクォート(
'
)で囲まれた任意の文字列です。シングルクォートを含めるには、それを繰り返します(例:'It''s raining today'
)。これらは、二重引用符を使用する引用符付き識別子
と混同しないでください。または、文字列を2つのドル記号で囲むことで定義できます。その場合、シングルクォートはエスケープせずに使用できます(It's raining today
)。後者の形式は、関数本体でシングルクォート文字をエスケープする必要がないように($$
よりも発生する可能性が高いため)、ユーザー定義関数を定義する場合によく使用されます。 -
整数、浮動小数点数、ブール値の定数は、期待どおりに定義されます。ただし、浮動小数点数は特別な
NaN
とInfinity
定数を許可することに注意してください。 -
CQLはUUID定数をサポートしています。
-
BLOBのコンテンツは16進数で提供され、
0x
で始まります。 -
特別な
NULL
定数は、値がないことを示します。
これらの定数の型については、データ型セクションを参照してください。
項
CQLには、CQLがサポートする値の種類を示す項の概念があります。項は次のように定義されます。
term::= constant | literal | function_call | arithmetic_operation | type_hint | bind_marker
literal::= collection_literal | vector_literal | udt_literal | tuple_literal
function_call::= identifier '(' [ term (',' term)* ] ')'
arithmetic_operation::= '-' term | term ('+' | '-' | '*' | '/' | '%') term
type_hint::= '(' cql_type ')' term
bind_marker::= '?' | ':' identifier
したがって、項は次のいずれかです。
コメント
CQLのコメントは、二重ダッシュ(--
)または二重スラッシュ(//
)で始まる行です。
/
と /
で囲むことで、複数行コメントもサポートされます(ただし、ネストはサポートされていません)。
-- This is a comment
// This is a comment too
/* This is
a multi-line comment */
文
CQLは、次のカテゴリに分類できる文で構成されています。
-
データの格納方法を定義および変更する
data-definition
文(キー空間とテーブル)。 -
データを選択、挿入、削除するための
data-manipulation
文。 -
secondary-indexes
文。 -
materialized-views
文。 -
cql-roles
文。 -
cql-permissions
文。 -
User-Defined Functions (UDFs)
文。 -
udts
文。 -
cql-triggers
文。
すべての文は以下にリストされており、このドキュメントの残りの部分で説明されています(上記のリンクを参照)。
cql_statement::= statement [ ';' ]
statement:=: ddl_statement :
| dml_statement
| secondary_index_statement
| materialized_view_statement
| role_or_permission_statement
| udf_statement
| udt_statement
| trigger_statement
ddl_statement::= use_statement
| create_keyspace_statement
| alter_keyspace_statement
| drop_keyspace_statement
| create_table_statement
| alter_table_statement
| drop_table_statement
| truncate_statement
dml_statement::= select_statement
| insert_statement
| update_statement
| delete_statement
| batch_statement
secondary_index_statement::= create_index_statement
| drop_index_statement
materialized_view_statement::= create_materialized_view_statement
| drop_materialized_view_statement
role_or_permission_statement::= create_role_statement
| alter_role_statement
| drop_role_statement
| grant_role_statement
| revoke_role_statement
| list_roles_statement
| grant_permission_statement
| revoke_permission_statement
| list_permissions_statement
| create_user_statement
| alter_user_statement
| drop_user_statement
| list_users_statement
udf_statement::= create_function_statement
| drop_function_statement
| create_aggregate_statement
| drop_aggregate_statement
udt_statement::= create_type_statement
| alter_type_statement
| drop_type_statement
trigger_statement::= create_trigger_statement
| drop_trigger_statement