0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Couchbase Lite機能解説:クエリAPI③ 演算子

Last updated at Posted at 2022-03-09

はじめに

ここでは、Couchbase Lite 3.0の新機能であるクエリAPIについて解説します。

なお、Couchbase Mobileについては、Couchbase Mobileアプリケーション開発へのロードマップに記事をまとめている他、(これらの記事を元に構成した)以下の電子書籍を無償で頒布しています。

また、Couchbase Mobileは、Couchbase LiteとCouchbase Serverとのデータ同期機能を提供します。Couchbase Serverの存在意義、機能詳細、利用方法等については、拙著NoSQLドキュメント指向データベースCouchbase Serverファーストステップガイド(インプレスR&D刊)や、NoSQL/JSONデータベースCouchbase Server理解・活用へのロードマップにまとめてある記事をご参考ください。

クエリAPI解説③ 演算子

二項演算子

算術演算子

以下が、サポートされています。

+(加算)、-(減算)、*(乗算)、/(除算)、%(剰余)

/(除算)については、両方のオペランドが整数の場合は整数除算が使用され、一方が浮動小数点の場合は浮動小数点除算が使用されます。算術関数DIVでは、常に浮動小数点除算が実行されます。

比較演算子

一般的に馴染みの深い以下の演算子が、サポートされています。

= または ==(等号)、!= また <>(不等号)、>>=<<=

IN

左辺の値が右辺に指定された式にあるかどうかを評価します。
右辺の式として、配列を値として持つプロパティを用いることができます。

WHERE “James” IN contactsList
LIKE

以下の2つのワイルドカードがサポートされています。

  • %: 0個以上の文字に一致します。
  • _: 1文字に一致します。
WHERE name LIKE ‘a%’
WHERE name LIKE ‘%a’
WHERE name LIKE ‘%or%
WHERE name LIKE ‘a%o%’
WHERE name LIKE ‘%_r%’
WHERE name LIKE ‘%a_%’
WHERE name LIKE ‘%a__%’

マッチングは、ASCII文字では大文字と小文字を区別せず、非ASCII文字では大文字と小文字を区別します。

MATCH

Couchbase Liteの全文検索機能をクエリで利用するために用います。

WHERE <インデックス名> MATCH "value"

詳細は、フルテキストサーチ機能に関するドキュメントを参照ください。

BETWEEN

v1 >= Xおよびv1⇐X+ z

WHERE v1 BETWEEN 10 and 100

上記は、WHERE v1 >= 10 AND v1 <= 100 と同等です。

IS (NOT) NULL | MISSING | VALUED
IS NULL

nullに等しい

WHERE v1 IS NULL
IS NOT NULL

nullに等しくない

WHERE v1 IS NOT NULL
IS MISSING

MISSINGに等しい(プロパティが定義されていない)

WHERE v1 IS MISSING
IS NOT MISSING

MISSINGに等しくない(プロパティが定義されている)

WHERE v1 IS NOT MISSING
IS VALUED

NULLでも、MISSINGでもない(プロパティが定義されており、null以外の値を持つ)

WHERE v1 IS VALUED
IS NOT VALUED

NULLまたは、MISSING(プロパティが定義されていないか、定義されていても値がnullである)

WHERE v1 IS NOT VALUED

論理演算子

論理演算子は、ブーリアンとしての評価に、次の論理規則を使用して式を結合します。

  • TRUEはTRUE、FALSEはFALSE
  • 数字0または0.0はFALSE
  • 配列と辞書はFALSE
  • 文字列とBlobは、値がゼロ以外としてキャストされる場合はTRUE、値が0または0.0としてキャストされる場合はFALSE
  • NULLはFALSE
  • MISSINGはMISSING

TOBOOLEAN関数を用いる評価では、以下のような違いがあります。

  • MISSING、NULLおよびFALSEはFALSE
  • 数字0はFALSE
  • 空の文字列、配列、およびオブジェクトはFALSE
  • 他のすべての値はTRUE

TOBOOLEAN関数では、Couchbase ServerのN1QLのルールに基づいて値を変換することができます。

また、以下の論理演算子ANDORの評価においても、Couchbase ServerのN1QLとは異なる部分があります。詳細の確認が必要な場合は、ドキュメントを参照ください。

AND

オペランド式がTRUEと評価された場合、TRUEを返します。それ以外の場合はFALSEを返します。

オペランドがMISSINGで、もう一方がTRUEの場合はMISSINGを返し、もう一方のオペランドがFALSEの場合はFALSEを返します。

一方のオペランドがNULLで、もう一方がTRUEの場合はNULLを返し、もう一方のオペランドがFALSEの場合はFALSEを返します。

WHERE city = “San Francisco” AND status = true
OR

オペランド式の1つがTRUEと評価された場合、TRUEを返します。それ以外の場合はFALSEを返します。

一方のオペランドがMISSINGの場合、他のオペランドがFALSEの場合はMISSINGになり、他のオペランドがTRUEの場合はTRUEになります。

一方のオペランドがNULLの場合、他のオペランドがFALSEの場合はNULLになり、他のオペランドがTRUEの場合はTRUEになります。

WHERE city = “San Francisco” OR city = “Santa Clara”
文字列演算子

文字列の連結のために||を利用することができます。

SELECT firstnm || lastnm AS fullname FROM db

単項演算子

3つの単項演算子+ - NOTが提供されています。
-は、オペランドを加法における逆言(反数)に置き換えます。+は、オペランドを変更しません(正の値であることの強調)。
NOTは、ブーリアンの値を反転(TRUEとFALSEを交換する)します。

負の値の表現と正の値の強調の例。

WHERE v1 >= -10 AND v1 <= +10

論理否定演算子利用例。

WHERE "James" NOT IN contactsList
  • NOT演算子は、INLIKEMATCHBETWEEN演算子などの演算子と組み合わせて使用​​できます。
  • NULL値に対するNOT演算は、NULLを返します。
  • MISSING値に対するNOT演算は、MISSINGを返します。

COLLATE演算子

文字列比較(照合)の実行方法を指定します。文字列比較式およびORDER BY句と組み合わせて使用​​します。

複数の照合を使用する場合は、括弧を用います。照合が1つだけ使用される場合、括弧はオプションです。

Collat​​eはCouchbase ServerのN1QLではサポートされていません

使用可能なオプションは次のとおりです。

  • UNICODE:Unicode比較を実行する(デフォルトでは、ASCII比較)
  • CASE: 大文字と小文字を区別して比較を行う
  • DIACRITIC: アクセントと発音区別符号を考慮に入れる。デフォルトでオン。
  • NO: 他の照合の接頭辞として使用して、それらを無効にする(NOCASEは、大文字と小文字を区別しない)

以下に利用例を示します。

SELECT department FROM db WHERE (name = "fred") COLLATE UNICODE
SELECT department FROM db WHERE (name = "fred") COLLATE (UNICODE)
SELECT department FROM db WHERE (name = "fred") COLLATE (UNICODE CASE)
SELECT name FROM db ORDER BY name COLLATE (UNICODE DIACRITIC)

条件演算子

条件演算子(CASE演算子)は、条件付きロジックを評価します。

シンプルケース(Simple Case)式とサーチドケース(Searched Case)式の両方がサポートされています。構文上の違いは、Simple Case式の場合、CASEキーワードの後に​​式があることです。

  • シンプルケース式

  • CASE式が最初のWHEN式と等しい場合、結果はTHEN式になります。

  • それ以外の場合、後続のWHEN句は同じ方法で評価されます。

  • 一致するものが見つからない場合、CASE式の結果はELSE式になり、ELSE式が指定されていない場合はNULLになります。

  • サーチドケース式

  • 最初のWHEN式がTRUEの場合、この式の結果はそのTHEN式になります。

  • それ以外の場合、後続のWHEN句は同じ方法で評価されます。 WHEN句がTRUEと評価されない場合、式の結果はELSE式になり、ELSE式が指定されていない場合はNULLになります。

シンプルケース式の例。

SELECT CASE state WHEN CA THEN Local ELSE Non-Local END FROM DB

サーチドケース式の例。

SELECT CASE WHEN shippedOn IS NOT NULL THEN SHIPPED ELSE "NOT-SHIPPED" END FROM db

関連情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?