このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

 

 

 

この記事のオリジナルは、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」 接続オプションを長く提案してきました。このオプションは、識別子として使用できるようユーザーまたはアプリケーション側で特定のキーワードをオフにすることができます。

例えば、以下のように特定することができます。

 

  1. SET OPTION non_keywords = ‘TRUNCATE, SYNCHRONIZE’;

 

SQL Anywhere のバージョン 12 では、この柔軟性を一歩進め、追加の接続オプション “reserved_keywords” をサポートしています。

この新しいオプション実装の背景には、サーバーがより容易に、自動的に、out-of-the-box (箱から出してすぐの状態) でアップグレードできるようにするという意図があります。例外として、お客様のアプリケーションとの競合の可能性が高い時場合の SQL 文法からのキーワードは除きます。

 

具体的な例として、SQL Anywhere 12 では、MySQL アプリケーションを開発する人にはよく知られている LIMIT OFFSET 句をサポートしています。

LIMITOFFSET は、機能的には SELECT TOP ... START AT とほぼ同じです。しかしながら、LIMITを SQL 文法に導入するには、これが予約キーワードである必要があります。潜在的には、「limit」 を識別子として使用する既存のアプリケーションを壊してしまうことになります。そのため、LIMITのサポートは導入したものの、デフォルトではこれを無効にしておくことにしました。LIMIT 句 の使用を有効にするには、以下経由のキーワードとして有効にすることができます。

 

  1. 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 に関して技術的な質問のある方はコミュニティに登録し、
「+ Actions」から「Ask a Question」機能をご利用ください。

Language には「Japanese」、
Primary Tag には「SQL Anywhere」、
Additional tag には「SAP SQL Anywhere」、
User Tagに「sql anywhere japanese question」

を選択してください。

不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。

 

======================
ご購入に関するお問い合わせ

こちらよりお問い合わせください。

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply