コンテンツにスキップ
これは実験的な機能です。

Future

Future は SurrealDB の Futures 機能 を表現するクラスです。

インポート

import { Future } from "@tai-kun/surrealdb/decodeonly-datatypes";
import { Future } from "@tai-kun/surrealdb/encodable-datatypes";
import { Future } from "@tai-kun/surrealdb/standard-datatypes";

.constructor()

新しい Future オブジェクトを作成します。

new Future(source: string);

引数

source

future のブロック内の値や式です。

返値

new を通じて呼び出された場合、Future はそのインスタンスを返します。

.block インスタンス プロパティー >=decode-only

future のブロック内の値や式です。

.block: number;

.toString() インスタンス メソッド >=encodable

Future オブジェクトの文字列にします。

.toString(): string;

引数

なし。

返値

future のブロック内の値や式を返します。

import { Future } from "@tai-kun/surrealdb/encodable-datatypes";
const future = new Future(`time::now()`);
console.log(future.toString());
//-> time::now()

.toSurql() インスタンス メソッド >=encodable

Future オブジェクトを SurrealQL に埋め込める文字列に変換します。.toString() と似ていますが、ブロックは波括弧 ({}) で囲われ、<future> でキャストされます。

.toSurql(): string;

引数

なし。

返値

SurrealQL に埋め込める future を返します。

import { Future } from "@tai-kun/surrealdb/encodable-datatypes";
const future = new Future(`time::now()`);
console.log(future.toSurql());
//-> <future>{time::now()}

.surql() 静的 メソッド =standard

このメソッドは SurrealQL の記述を手助けします。テンプレートリテラルを使用して SurrealQL を記述することができます。テンプレートリテラルに埋め込まれた値は自動的に SurrealQL へ変換されます。また VSCode で SurrealDB 公式の拡張機能 をインストールしている場合、テンプレートリテラルのシンタックスハイライトが有効になります。

.surql(texts: TemplateStringsArray, ...values: unknown[]): string;

引数

texts

テンプレートリテラルを構成する文字列の配列です。

values

texts の各要素の間に埋め込む値です。

返値

SurrealQL です。

import { Future, Thing } from "@tai-kun/surrealdb/standard-datatypes";
const foo = "foo";
const rid = new Thing("person", "tai-kun");
const future = new Future(Future.surql`
LET $a = ${foo} + ${Future.raw("'-'")};
LET $b = type::string(${rid});
string::concat($a, $b)
`);
console.log(future.toSurql());
//-> <future>{
//-> LET $a = 'foo' + '-';
//-> LET $b = type::string(r'person:⟨tai-kun⟩');
//-> string::concat($a, $b)
//-> }

上記の例を .surql() を使わないとすると:

import { Future, Thing } from "@tai-kun/surrealdb/standard-datatypes";
import { toSurql } from "@tai-kun/surrealdb/utils";
const foo = "foo";
const rid = new Thing("person", "tai-kun");
const future = new Future(/*surql*/ `
LET $a = ${toSurql(foo)} + ${"'-'"};
LET $b = type::string(${rid.toSurql()});
string::concat($a, $b)
`);
console.log(future.toSurql());
//-> <future>{
//-> LET $a = 'foo' + '-';
//-> LET $b = type::string(r'person:⟨tai-kun⟩');
//-> string::concat($a, $b)
//-> }
  • 文字列やオブジェクトを toSurql ヘルパー関数や .toSurql() メソッドを使って SurrealQL 変換する必要があります。
  • Future.raw を使用せずに文字列を SurrealQL に埋め込むことができます。

発展

Future オブジェクトの汎用的な判定

プリセットに依存せずに値が Future オブジェクトかを判定するには isFuture 関数を使うことを推奨します。この関数は instanceof を使用しないため、検証する値のプリセットが不明な場合に役立ちます。

import { isFuture } from "@tai-kun/surrealdb";