SELECT
SQLクエリの一部を含む DSL を実装しようとしています。
2 つのテーブル間のJOIN
構文は、次のように指定されます (たとえばPostgreSQLの場合)。
// one of theese:
[ INNER ] JOIN
LEFT [ OUTER ] JOIN
RIGHT [ OUTER ] JOIN
FULL [ OUTER ] JOIN
CROSS JOIN
オプションのキーワードに注意してください。
次の Xtext 文法は機能します (一種の):
Join:
'INNER'? inner?='JOIN'
| left?='LEFT' 'OUTER'? 'JOIN'
| right?='RIGHT' 'OUTER'? 'JOIN'
| full?='FULL' 'OUTER'? 'JOIN'
| cross?='CROSS' 'JOIN'
;
もちろん、モデルの推論では、後でうまく処理できない一連のフラグが作成されます。
私が本当に欲しいのは、次のような列挙型です。
enum JoinType: INNER_JOIN | LEFT_JOIN | RIGHT_JOIN | FULL_JOIN | CROSS_JOIN;
次の理由で列挙型が必要です。
- 発電機等。簡単な
switch
ステートメントを使用できます。 - オプションのキーワードと埋め込まれた空白の処理は文法作業です。
その列挙型を残りの文法に接続する合理的な方法はありますか?