SAP SQL Anywhere におけるキーワードとアップグレード
この記事のオリジナルは、Glenn Paulley が sybase.com に 2010 年 4 月に掲載したものです。その中で、Glenn は SQL Anywhere パーサーがどのようにしてキーワードを認識するのか説明しています。
SQL Anywhereでは、新しいバージョンがリリースされるたびに追加の SQL 機能を実装してきました。これらは、標準 SQL の強化によってもたらされたものや、我々独自の製品イノベーションによるものです。
例えば SQL Anywhere の version 12 では、標準SQL:2008 の 「distinct predicate」をサポートしています。これは、シンタックス X IS [ NOT ] DISTINCT FROM Y
を持ち、二つの表現値を比較して、NULL をイコールの比較演算子として扱うことが可能です。
distinct predicate は、状況によってはたいへん便利です。特にストアドプロシージャーパラメーターを含み、表現が NULL でありうる場合に異なる SQL 構造を特定する必要性を好まない場合に便利です。
(余談ですが: distinct predicate がユーティリティーを持つ可能性がある一方で、同時に、SQL の “normal” 3-valued logic からのこのような偏りは、間違いなく、すでに混乱していてどこかで長々と議論されている NULL に絡む問題を増加させることになります。)
distinct predicate の場合、そのシンタックスは直線的な採用と実装が可能です。なぜならば、そのシンタックスには、- 間違いなく幾分不格好ですが – 少なくとも新しい予約語は含まれないからです。残念ながら、SQL では、追加の機能性が追加のキーワードを必要とすることがルールであることがよくあります。これらのキーワードは、文をパースする際に、曖昧性を避けるために予約語にする必要があります。
我々は、SQL Anywhere サーバーのYACC のカスタムビルドの実装に対して、「non_keywords
」 接続オプションを長く提案してきました。このオプションは、識別子として使用できるようユーザーまたはアプリケーション側で特定のキーワードをオフにすることができます。
例えば、以下のように特定することができます。
- SET OPTION non_keywords = ‘TRUNCATE, SYNCHRONIZE’;
SQL Anywhere のバージョン 12 では、この柔軟性を一歩進め、追加の接続オプション “reserved_keywords
” をサポートしています。
この新しいオプション実装の背景には、サーバーがより容易に、自動的に、out-of-the-box (箱から出してすぐの状態) でアップグレードできるようにするという意図があります。例外として、お客様のアプリケーションとの競合の可能性が高い時場合の SQL 文法からのキーワードは除きます。
具体的な例として、SQL Anywhere 12 では、MySQL アプリケーションを開発する人にはよく知られている LIMIT
と OFFSET
句をサポートしています。
続きはこちら: SAP SQL Anywhere におけるキーワードとアップグレード
SAPのSAP SQL Anywhere製品ページはこちら