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
句をサポートしています。
LIMIT
と OFFSET
は、機能的には SELECT TOP ... START AT
とほぼ同じです。しかしながら、LIMIT
を SQL 文法に導入するには、これが予約キーワードである必要があります。潜在的には、「limit」 を識別子として使用する既存のアプリケーションを壊してしまうことになります。そのため、LIMIT
のサポートは導入したものの、デフォルトではこれを無効にしておくことにしました。LIMIT
句 の使用を有効にするには、以下経由のキーワードとして有効にすることができます。
- SET OPTION PUBLIC.reserved_keywords = ‘LIMIT’;
サーバー内でワードがキーワードとして識別されたかどうかは、以下で決まります。 (優先順に):
- SQL Anywhere の予約語のリストに現れる
reserved_keywords
オプションでオンになっているnon_keywords
オプションを使用してオフになっている
reserved_keywords
オプションにより、SQL 言語の拡張サポートにおけるさらなる柔軟性を提供できるようになりました。
今後のSQL Anywhere リリースで追加される SQL 機能において、このオプション を有効活用したいと考えています。
===
SAP SQL Anywhere に関する詳細情報は、SAP SQL Anywhere Communityページ<英語> を参照してください。
上記のコミュニティーに掲載されている技術情報は、順次SQL Anywhere 日本語コミュニティ
に掲載しています。
SQL Anywhere に関してはまずはこちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。
SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「Ask a Question」機能をご利用ください。
Language には「Japanese」、
Primary Tag には「SAP SQL Anywhere」を選択
User Tagに「sql anywhere」「sql anywhere Japanese question」
を入力してください。
不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。
======================
ご購入に関するお問い合わせ
こちらよりお問い合わせください。