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

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

 

  1. 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製品ページはこちら