diff --git a/en/application-dev/reference/apis/js-apis-data-ability.md b/en/application-dev/reference/apis/js-apis-data-ability.md index f91f7a53f00c1183e07f14014bfad6f489f241ca..4045752d3f6cd83bcb09f939fc1670bd1f766a05 100644 --- a/en/application-dev/reference/apis/js-apis-data-ability.md +++ b/en/application-dev/reference/apis/js-apis-data-ability.md @@ -1,6 +1,7 @@ # DataAbilityPredicates ->![](../../public_sys-resources/icon-note.gif) **NOTE:** +>![](../../public_sys-resources/icon-note.gif) **NOTE** +> >The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. ## Modules to Import @@ -9,11 +10,8 @@ import dataAbility from '@ohos.data.dataAbility' ``` ## System Capabilities -SystemCapability.DistributedDataManager.DataShare.Consumer +SystemCapability.DistributedDataManager.DataShare.Core -## Required Permissions - -None ## dataAbility.createRdbPredicates @@ -1697,4 +1695,3 @@ Sets the **DataAbilityPredicates** to match the field with data type **Array< predicates.notIn("NAME", ["Lisa", "Rose"]) ``` - diff --git a/en/application-dev/reference/apis/js-apis-data-rdb.md b/en/application-dev/reference/apis/js-apis-data-rdb.md index e3fc6ff3f954b818b57c59366ebe98987cca9c6c..6d92a418fadd6d56ca0520fbc3b32026a82c037c 100644 --- a/en/application-dev/reference/apis/js-apis-data-rdb.md +++ b/en/application-dev/reference/apis/js-apis-data-rdb.md @@ -1,6 +1,7 @@ # Relational Database -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** +> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE** +> > The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. diff --git a/en/application-dev/reference/apis/js-apis-data-resultset.md b/en/application-dev/reference/apis/js-apis-data-resultset.md index 4a13518debfc8bd7ad762e81ca69035d464082e9..654cff58ad2c45b1d809251a7db2059c82b8928b 100644 --- a/en/application-dev/reference/apis/js-apis-data-resultset.md +++ b/en/application-dev/reference/apis/js-apis-data-resultset.md @@ -1,6 +1,7 @@ # Result Set ->![](../../public_sys-resources/icon-note.gif) **NOTE:** +>![](../../public_sys-resources/icon-note.gif) **NOTE** +> >The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. ## System Capabilities @@ -20,9 +21,6 @@ promise.then((resultSet) => { console.log("resultSet columnCount:" + resultSet.columnCount); ``` -## Required Permissions - -None ## ResultSet diff --git a/en/application-dev/reference/apis/js-apis-data-storage.md b/en/application-dev/reference/apis/js-apis-data-storage.md index f58bf8d37324b73d3b9b143ecec10a538730bc59..b8dd0be285a7e325ee0f5a2e7483bdb5d04400f7 100644 --- a/en/application-dev/reference/apis/js-apis-data-storage.md +++ b/en/application-dev/reference/apis/js-apis-data-storage.md @@ -2,7 +2,8 @@ Lightweight storage provides applications with data processing capability and allows applications to perform lightweight data storage and query. Data is stored in key-value pairs. Keys are of the string type, and values can be of the numeric, string, or Boolean type. ->![](../../public_sys-resources/icon-note.gif) **NOTE:** +>![](../../public_sys-resources/icon-note.gif) **NOTE** +> >The initial APIs of this module are supported since API version 6. Newly added APIs will be marked with a superscript to indicate their earliest API version. ## Modules to Import @@ -12,11 +13,8 @@ import dataStorage from '@ohos.data.storage' ``` ## System Capabilities -SystemCapability.DistributedDataManager.Preference.Core +SystemCapability.DistributedDataManager.Preferences.Core -## Required Permissions - -None ## Attributes @@ -119,7 +117,7 @@ Reads a specified file and loads the data to the **Storage** instance for data storage.putSync('startup', 'auto') storage.flushSync() })() - ``` + ``` ## dataStorage.getStorage @@ -180,7 +178,7 @@ Reads a specified file and loads the data to the **Storage** instance for data storage.flushSync() }) })() - ``` + ``` ## dataStorage.getStorage @@ -248,7 +246,7 @@ Reads a specified file and loads the data to the **Storage** instance for data console.info("Get the storage failed, path: " + path + '/mystore') }) }() - ``` + ``` ## dataStorage.deleteStorageSync @@ -1614,4 +1612,3 @@ Unsubscribes from data changes. - diff --git a/en/application-dev/reference/apis/js-apis-distributed-data.md b/en/application-dev/reference/apis/js-apis-distributed-data.md index 30de34fd1d670b79965c5affa2139ec963999eb8..ed190a2e4e52c1bd771db9dc8448904d15f58031 100644 --- a/en/application-dev/reference/apis/js-apis-distributed-data.md +++ b/en/application-dev/reference/apis/js-apis-distributed-data.md @@ -1,9 +1,11 @@ -# Distributed Data Management +# Distributed Data Management ->![](../../public_sys-resources/icon-note.gif) **NOTE:** +>![](../../public_sys-resources/icon-note.gif) **NOTE** +> >The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. -## Modules to Import + +## Modules to Import ``` import distributedData from '@ohos.data.distributedData'; @@ -12,45 +14,21 @@ import distributedData from '@ohos.data.distributedData'; SystemCapability.DistributedDataManager.KVStore.DistributedKVStore -## distributedData.createKVManager -createKVManager\(config: KVManagerConfig, callback: AsyncCallback\): void -Creates a **KVManager** object to manage key-value \(KV\) stores. This method uses an asynchronous callback to return the result. +## distributedData.createKVManager -- Parameters +createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager>): void + +Creates a **KVManager** object to manage key-value (KV) stores. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ------ | ------ | +| config | [KVManagerConfig](#kvmanagerconfig) | Yes| Configuration of the **KVManager** object, including the bundle name and user information of the caller.| +| callback | AsyncCallback<[KVManager](#kvmanager)> | Yes| Callback invoked to return the **KVManager** object created.| - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

config

-

KVManagerConfig

-

Yes

-

Configuration of the KVManager object, including the bundle name and user information of the caller.

-

callback

-

AsyncCallback<KVManager>

-

Yes

-

Callback invoked to return the KVManager object created.

-
- Example @@ -61,7 +39,7 @@ Creates a **KVManager** object to manage key-value \(KV\) stores. This method bundleName : 'com.example.datamanagertest', userInfo : { userId : '0', - userType : 0 + userType : distributedData.UserType.SAME_USER_ID } } distributedData.createKVManager(kvManagerConfig, function (err, manager) { @@ -77,54 +55,23 @@ Creates a **KVManager** object to manage key-value \(KV\) stores. This method } ``` +## distributedData.createKVManager -## distributedData.createKVManager - -createKVManager\(config: KVManagerConfig\): Promise +createKVManager(config: KVManagerConfig): Promise<KVManager> -Creates a **KVManager** object to manage KV stores. This method uses a promise to return the result. +Creates a **KVManager** object to manage KV stores. This method uses a promise to return the result. - Parameters - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

config

-

KVManagerConfig

-

Yes

-

Configuration of the KVManager object, including the bundle name and user information of the caller.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ------ | ------ | +| config |[KVManagerConfig](#kvmanager) | Yes| Configuration of the **KVManager** object, including the bundle name and user information of the caller.| -- Return values +- Return value - - - - - - - - - -

Type

-

Description

-

Promise<KVManager>

-

Promise used to return the KVManager object created.

-
+| Type| Description| +| -------- | -------- | +| Promise<[KVManager](#kvmanager)> | Promise used to return the **KVManager** object created.| - Example @@ -135,7 +82,7 @@ Creates a **KVManager** object to manage KV stores. This method uses a promise bundleName : 'com.example.datamanagertest', userInfo : { userId : '0', - userType : 0 + userType : distributedData.UserType.SAME_USER_ID } } distributedData.createKVManager(kvManagerConfig).then((manager) => { @@ -150,167 +97,67 @@ Creates a **KVManager** object to manage KV stores. This method uses a promise ``` -## KVManagerConfig - -Provides configuration of the **KVManager** object, including the bundle name and user information of the caller. - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

userInfo

-

UserInfo

-

Yes

-

User information.

-

bundleName

-

string

-

Yes

-

Bundle name.

-
- -## UserInfo +## KVManagerConfig + +Provides configuration of the **KVManager** object, including the bundle name and user information of the caller. + +| Name| Type| Mandatory| Description| +| ----- | ------ | ------ | ------ | +| userInfo | [UserInfo](#userinfo) | Yes| User information.| +| bundleName | string | Yes| Bundle name.| + + + +## UserInfo Defines user information. - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

userId

-

string

-

Yes

-

User ID.

-

userType

-

UserType

-

Yes

-

User type.

-
- -## UserType +| Name| Type| Mandatory| Description| +| ----- | ------ | ------ | ------ | +| userId | string | Yes| User ID.| +| userType | [UserType](#usertype) | Yes| User type.| + + +## UserType Defines the user type. - - - - - - - - - - - -

Name

-

Default Value

-

Description

-

SAME_USER_ID

-

0

-

User who logs in to different devices using the same account.

-
- -## KVManager - -Creates a **KVManager** object to obtain KV store information. Before calling any method in **KVManager**, you must use **createKVManager** to create a **KVManager** object. - -### getKVStore - -getKVStore\(storeId: string, options: Options, callback: AsyncCallback\): void +| Name| Default Value| Description| +| ----- | ------ | ------ | +| SAME\_USER_ID| 0 | User who logs in to different devices using the same account.| + + +## KVManager + +Creates a **KVManager** object to obtain KV store information. Before calling any method in **KVManager**, you must use **createKVManager** to create a **KVManager** object. + +### getKVStore + +getKVStore(storeId: string, options: Options, callback: AsyncCallback<T>): void Creates and obtains a KV store. This method uses an asynchronous callback to return the result. -- Parameters +- Parameters - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

storeId

-

string

-

Yes

-

Unique identifier of the KV store. The length cannot exceed MAX_STORE_ID_LENGTH.

-

options

-

Options

-

Yes

-

Configuration of the KV store.

-

callback

-

AsyncCallback<T>,

-

<T extends KVStore>

-

Yes

-

Callback invoked to return the KV store created.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ------ | ------ | +| storeId | string | Yes| Unique identifier of the KV store. The length cannot exceed [MAX\_STORE\_ID\_LENGTH](#constants).| +| options | [Options](#options) | Yes| Configuration of the KV store.| +| callback | AsyncCallback<T>, <T extends KVStore>| Yes| Callback invoked to return the KV store created.| - Example ``` let kvStore; + let kvManager; try { const options = { createIfMissing : true, encrypt : false, backup : false, autoSync : true, - kvStoreType : 1, - securityLevel : 3, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + securityLevel : distributedData.SecurityLevel.S2, }; kvManager.getKVStore('storeId', options, function (err, store) { if (err) { @@ -326,1164 +173,4709 @@ Creates and obtains a KV store. This method uses an asynchronous callback to ret ``` -### getKVStore +### getKVStore -getKVStore\(storeId: string, options: Options\): Promise +getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> Creates and obtains a KV store. This method uses a promise to return the result. -- Parameters +- Parameters + +| Name| Type| Mandatory| Description| +| ------- | ---------------------- | ---- | -------------------- | +| storeId | string | Yes| Unique identifier of the KV store. The length cannot exceed [MAX\_STORE\_ID\_LENGTH](#constants).| +| options | [Options](#options) | Yes| Configuration of the KV store.| + + +- Return value + +| Type| Description| +| -------------------------------------- | ------------------------ | +| Promise<T> <T extends KVStore> | Promise used to return the KV store created.| + + +- Example + + ``` + let kvStore; + let kvManager; + try { + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + securityLevel : distributedData.SecurityLevel.S2, + }; + kvManager.getKVStore('storeId', options).then((store) => { + console.log("getKVStore success"); + kvStore = store; + }).catch((err) => { + console.log("getKVStore err: " + JSON.stringify(err)); + }); + } catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + +### closeKVStore8+ ### + +closeKVStore(appId: string, storeId: string, kvStore: KVStore, callback: AsyncCallback<void>): void; + +Closes a KV store. This method uses an asynchronous callback to return the result. + +- Parameters + + +| Name| Type| Mandatory| Description| +| ------- | ----------------- | ---- | --------------------------- | +| appId | string | Yes| Bundle name of the app that invokes the KV store.| +| storeId | string | Yes| Unique identifier of the KV store to close. The length cannot exceed the value of [MAX\_STORE\_ID_LENGTH](#constants).| +| kvStore | [KVStore](#kvstore) | Yes| KV store to close.| +| callback | AsyncCallback<void> | Yes| Callback used to return the result. If the KV store is closed, **true** will be returned. Otherwise, **false** will be returned.| - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

storeId

-

string

-

Yes

-

Unique identifier of the KV store. The length cannot exceed MAX_STORE_ID_LENGTH.

-

options

-

Options

-

Yes

-

Configuration of the KV store.

-
- -- Return values - - - - - - - - - - -

Type

-

Description

-

Promise<T>

-

<T extends KVStore>

-

Promise used to return the KV store created.

-
- Example ``` let kvStore; + let kvManager; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } try { - const options = { - createIfMissing : true, - encrypt : false, - backup : false, - autoSync : true, - kvStoreType : 1, - securityLevel : 3, - }; - kvManager.getKVStore('storeId', options).then((store) => { - console.log("getKVStore success"); + kvManager.getKVStore('storeId', options, async function (err, store) { + console.log('getKVStore success'); kvStore = store; - }).catch((err) => { - console.log("getKVStore err: " + JSON.stringify(err)); + await kvManager.closeKVStore('appId', 'storeId', kvStore, function (err, data) { + console.log('closeKVStore success'); + }); }); } catch (e) { - console.log("An unexpected error occurred. Error:" + e); + console.log('closeKVStore e ' + e); } ``` +### closeKVStore8+ ### -## Options +closeKVStore(appId: string, storeId: string, kvStore: KVStore): Promise<void>; -Provides KV store configuration. +Closes a KV store. This method uses a promise to return the result. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

createIfMissing

-

boolean

-

No

-

Whether to create a KV store if no database file exists. By default, a KV store is created.

-

encrypt

-

boolean

-

No

-

Whether to encrypt database files. By default, database files are not encrypted.

-

backup

-

boolean

-

No

-

Whether to back up database files. By default, database files are backed up.

-

autoSync

-

boolean

-

No

-

Whether database files are automatically synchronized. By default, database files are not automatically synchronized.

-

kvStoreType

-

KVStoreType

-

No

-

Type of the KV store to create. By default, a device KV store is created. The device KV store stores data for multiple devices that collaborate with each other.

-

securityLevel

-

SecurityLevel

-

No

-

Security level of the KV store. By default, the security level is not set.

-
- -## KVStoreType +- Parameters -Defines the KV store types. +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------------- | +| appId | string | Yes| Bundle name of the app that invokes the KV store.| +| storeId | string | Yes| Unique identifier of the KV store to close. The length cannot exceed the value of [MAX\_STORE\_ID_LENGTH](#constants).| +| kvStore | [KVStore](#kvstore) | Yes| KV store to close.| - - - - - - - - - - - - - - - - - - - -

Name

-

Default Value

-

Description

-

DEVICE_COLLABORATION

-

0

-

Device KV store.

-

SINGLE_VERSION

-

1

-

Single KV store.

-

MULTI_VERSION

-

2

-

Multi-version KV store. This type is not supported currently.

-
- -## SecurityLevel +- Return value -Defines the KV store security levels. +| Type| Description| +| ------------- | -------------- | +| Promise | Promise used to return the result. If the KV store is closed, **true** will be returned. Otherwise, **false** will be returned.| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Default Value

-

Description

-

NO_LEVEL

-

0

-

No security level is set for the KV store.

-

S0

-

1

-

The KV store security level is public.

-

S1

-

2

-

The KV store security level is low. If data leakage occurs, minor impact will be caused on the database.

-

S2

-

3

-

The KV store security level is medium. If data leakage occurs, moderate impact will be caused on the database.

-

S3

-

5

-

The KV store security level is high. If data leakage occurs, major impact will be caused on the database.

-

S4

-

6

-

The KV store security level is critical. If data leakage occurs, severe impact will be caused on the database.

-
- -## Constants +- Example -Defines the KV store constants. + ``` + let kvManager; + let kvStore; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } + try { + kvManager.getKVStore('storeId', options).then(async (store) => { + console.log('getKVStore success'); + kvStore = store; + await kvManager.closeKVStore('appId', 'storeId', kvStore).then(() => { + console.log('closeKVStore success'); + }).catch((err) => { + console.log('closeKVStore err ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('CloseKVStore getKVStore err ' + JSON.stringify(err)); + }); + } catch (e) { + console.log('closeKVStore e ' + e); + } + ``` + + +### deleteKVStore8+ ### + +deleteKVStore(appId: string, storeId: string, callback: AsyncCallback<void>): void; + +Deletes a KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| appId | string | Yes| Bundle name of the app that invokes the KV store.| +| storeId | string | Yes| Unique identifier of the KV store to delete. The length cannot exceed the value of [MAX\_STORE\_ID_LENGTH](#constants).| +| callback | AsyncCallback<void> | Yes| Callback used to return the result. If the KV store is deleted, **true** will be returned. Otherwise, **false** will be returned.| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Default Value

-

Description

-

MAX_KEY_LENGTH

-

1024

-

Maximum length (in bytes) of a key in the KV store.

-

MAX_VALUE_LENGTH

-

4194303

-

Maximum length (in bytes) of a value in the KV store.

-

MAX_KEY_LENGTH_DEVICE

-

896

-

Maximum length of the device coordinate key.

-

MAX_STORE_ID_LENGTH

-

128

-

Maximum length (in bytes) of the KV store ID.

-

MAX_QUERY_LENGTH

-

512000

-

Maximum query length.

-

MAX_BATCH_SIZE

-

128

-

Maximum size of a batch operation.

-
- -## KVStore - -Provides methods to manage data in a KV store, for example, adding or deleting data and subscribing to data changes or completion of data synchronization. Before calling any method in **KVStore**, you must use **getKVStore** to create a **KVStore** object. - -### put - -put\(key: string, value: Uint8Array | string | number | boolean, callback: AsyncCallback\): void - -Adds a key-value pair of the specified type to the KV store. This method uses an asynchronous callback to return the result. - -- Parameters - - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

key

-

string

-

Yes

-

Key of the key-value pair to add. It cannot be empty, and the length cannot exceed MAX_KEY_LENGTH.

-

value

-

Uint8Array | string | number | boolean

-

Yes

-

Value of the key-value pair to add. The value type can be Uint8Array, number, string, or boolean.

-

A value of the Uint8Array or string type cannot exceed MAX_VALUE_LENGTH.

-

callback

-

AsyncCallback<void>

-

Yes

-

Callback invoked to return the result.

-
- Example ``` - const KEY_TEST_STRING_ELEMENT = 'key_test_string'; - const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + let kvManager; + let kvStore; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } try { - kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { - if (err != undefined) { - console.log("put err: " + JSON.stringify(err)); - return; - } - console.log("put success"); + kvManager.getKVStore('store', options, async function (err, store) { + console.log('getKVStore success'); + kvStore = store; + await kvManager.deleteKVStore('appId', 'storeId', function (err, data) { + console.log('deleteKVStore success'); + }); }); - }catch (e) { - console.log("An unexpected error occurred. Error:" + e); + } catch (e) { + console.log('DeleteKVStore e ' + e); } ``` +### deleteKVStore8+ ### -### put - -put\(key: string, value: Uint8Array | string | number | boolean\): Promise +deleteKVStore(appId: string, storeId: string): Promise<void>; -Adds a key-value pair of the specified type to the KV store. This method uses a promise to return the result. +Deletes a KV store. This method uses a promise to return the result. - Parameters - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

key

-

string

-

Yes

-

Key of the key-value pair to add. It cannot be empty, and the length cannot exceed MAX_KEY_LENGTH.

-

value

-

Uint8Array | string | number | boolean

-

Yes

-

Value of the key-value pair to add. The value type can be Uint8Array, number, string, or boolean.

-

A value of the Uint8Array or string type cannot exceed MAX_VALUE_LENGTH.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| appId | string | Yes| Bundle name of the app that invokes the KV store.| +| storeId | string | Yes| Unique identifier of the KV store to delete. The length cannot exceed the value of [MAX\_STORE\_ID_LENGTH](#constants).| -- Return values - - - - - - - - - -

Type

-

Description

-

Promise<void>

-

Promise used to return the result.

-
+- Return value +| Type| Description| +| ------------- | -------------- | +| Promise<void> | Promise used to return the result. If the KV store is deleted, **true** will be returned. Otherwise, **false** will be returned.| - Example ``` - const KEY_TEST_STRING_ELEMENT = 'key_test_string'; - const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + let kvManager; + let kvStore; + const options = { + createIfMissing : true, + encrypt : false, + backup : false, + autoSync : true, + kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, + schema : '', + securityLevel : distributedData.SecurityLevel.S2, + } try { - kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => { - console.log("put success: " + JSON.stringify(data)); + kvManager.getKVStore('storId', options).then(async (store) => { + console.log('getKVStore success'); + kvStore = store; + await kvManager.deleteKVStore('appId', 'storeId').then(() => { + console.log('deleteKVStore success'); + }).catch((err) => { + console.log('deleteKVStore err ' + JSON.stringify(err)); + }); }).catch((err) => { - console.log("put err: " + JSON.stringify(err)); + console.log('getKVStore err ' + JSON.stringify(err)); }); - }catch (e) { - console.log("An unexpected error occurred. Error:" + e); + } catch (e) { + console.log('deleteKVStore e ' + e); } ``` -### delete +### getAllKVStoreId8+ ### -delete\(key: string, callback: AsyncCallback\): void +getAllKVStoreId(appId: string, callback: AsyncCallback<string[]>): void; -Deletes a KV pair from the KV store. This method uses an asynchronous callback to return the result. +Obtains the IDs of all the KV stores that are created using **getKvStore** and have not been deleted using **deleteKvStore**. This method uses an asynchronous callback to return the result. - Parameters - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

key

-

string

-

Yes

-

Key of the KV pair to delete. It cannot be empty, and the length cannot exceed MAX_KEY_LENGTH.

-

callback

-

AsyncCallback<void>

-

Yes

-

Callback invoked to return the result.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| appId | string | Yes| Bundle name of the app that invokes the KV store.| +| callback | AsyncCallback<void> | Yes|Callback used to return the KV store IDs obtained. | - Example ``` - const KEY_TEST_STRING_ELEMENT = 'key_test_string'; - const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + let kvManager; try { - kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { - if (err != undefined) { - console.log("put err: " + JSON.stringify(err)); - return; - } - console.log("put success"); - kvStore.delete(KEY_TEST_STRING_ELEMENT, function (err,data) { - if (err != undefined) { - console.log("delete err: " + JSON.stringify(err)); - return; - } - console.log("delete success"); - }); + kvManager.getAllKVStoreId('appId', function (err, data) { + console.log('GetAllKVStoreId success'); + console.log('GetAllKVStoreId size = ' + data.length); }); - }catch (e) { - console.log("An unexpected error occurred. Error:" + e); + } catch (e) { + console.log('GetAllKVStoreId e ' + e); } ``` -### delete +### getAllKVStoreId8+ ### -delete\(key: string\): Promise +getAllKVStoreId(appId: string): Promise<string[]>; -Deletes a KV pair from the KV store. This method uses a promise to return the result. +Obtains the IDs of all the KV stores that are created using **getKvStore** and have not been deleted using **deleteKvStore**. This method uses a promise to return the result. - Parameters - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

key

-

string

-

Yes

-

Key of the KV pair to delete. It cannot be empty, and the length cannot exceed MAX_KEY_LENGTH.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| appId | string | Yes| Bundle name of the app that invokes the KV store.| + -- Return values +- Return value - - - - - - - - - -

Type

-

Description

-

Promise<void>

-

Promise used to return the result.

-
+| Type| Description| +| ------------- | -------------- | +| Promise<string[]>| Promise used to return the KV store IDs obtained.| - Example ``` - const KEY_TEST_STRING_ELEMENT = 'key_test_string'; - const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + let kvManager; try { - kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => { - console.log("put success: " + JSON.stringify(data)); - kvStore.delete(KEY_TEST_STRING_ELEMENT).then((data) => { - console.log("delete success"); - }).catch((err) => { - console.log("delete err: " + JSON.stringify(err)); - }); + console.log('GetAllKVStoreId'); + kvManager.getAllKVStoreId('apppId').then((data) => { + console.log('getAllKVStoreId success'); + console.log('size = ' + data.length); }).catch((err) => { - console.log("put err: " + JSON.stringify(err)); + console.log('getAllKVStoreId err ' + JSON.stringify(err)); }); - }catch (e) { - console.log("An unexpected error occurred. Error:" + e); + } catch(e) { + console.log('getAllKVStoreId e ' + e); } ``` -### on +### on8+ ### -on\(event: 'dataChange', type: SubscribeType, observer: Callback\): void +on(event: 'distributedDataServiceDie', deathCallback: Callback<void>): void; -Subscribes to data changes of the specified type. This method uses a synchronization callback to return the result. +Subscribes to the **distributedDataServiceDie** events. This method uses a synchronous callback to return the result. - Parameters - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Description

-

event

-

'dataChange'

-

Type of the events.

-

type

-

SubscribeType

-

Type of data changes.

-

observer

-

Callback<ChangeNotification>

-

Callback invoked to return the result.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| event | 'distributedDataServiceDie' | Yes| Type of events to subscribe to. | +| deathCallback | Callback<void> | Yes| Callback invoked when the distributed data service is dead.| + + - Example ``` - kvStore.on('dataChange', 2, function (data) { - console.log("dataChange callback call data: " + JSON.stringify(data)); - }); + let kvManager; + try { + + console.log('KVManagerOn'); + const deathCallback = function () { + console.log('death callback call'); + } + kvManager.on('distributedDataServiceDie', deathCallback); + } catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } ``` -### on +### off8+ ### -on\(event: 'syncComplete', syncCallback: Callback\>\): void +off(event: 'distributedDataServiceDie', deathCallback?: Callback<void>): void; -Subscribes to notifications of data synchronization completion. This method uses a synchronization callback to return the result. +Unsubscribes from the **distributedDataServiceDie** events. This method uses a synchronous callback to return the result. - Parameters - - - - - - - - - - - - - - - -

Name

-

Type

-

Description

-

event

-

'syncComplete'

-

Type of the events.

-

syncCallback

-

Callback<Array<[string, number]>>

-

Callback invoked to return the result.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| event | 'distributedDataServiceDie' | Yes| Type of events to unsubscribe from. | +| deathCallback | Callback<void> | No| Callback used to return the **distributedDataServiceDie** events.| + - Example ``` - kvStore.on('syncComplete', function (data) { - console.log("syncComplete callback call data: " + data); - }); + let kvManager; + try { + console.log('KVManagerOff'); + const deathCallback = function () { + console.log('death callback call'); + } + kvManager.off('distributedDataServiceDie', deathCallback); + } catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` +## Options -## SubscribeType +Provides KV store configuration. -Defines the subscription type. +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| createIfMissing | boolean | No| Whether to create a KV store if no database file exists. By default, a KV store is created.| +| encrypt | boolean | No|Whether to encrypt database files. By default, database files are not encrypted.| +| backup | boolean | No|Whether to back up database files. By default, database files are backed up. | +| autoSync | boolean | No|Whether to automatically synchronize database files. By default, database files are not automatically synchronized.| +| kvStoreType | [KVStoreType](#kvstoretype) | No|Type of the KV store to create. By default, a device KV store is created. The device KV store stores data for multiple devices that collaborate with each other.| +| securityLevel | [SecurityLevel](#securitylevel) | No|Security level of the KV store. By default, the security level is not set.| - - - - - - - - - - - - - - - - - - - -

Name

-

Default Value

-

Description

-

SUBSCRIBE_TYPE_LOCAL

-

0

-

Local data changes.

-

SUBSCRIBE_TYPE_REMOTE

-

1

-

Peer data changes.

-

SUBSCRIBE_TYPE_ALL

-

2

-

Local and peer data changes.

-
- -## ChangeNotification -Defines the content of data change notifications, including inserted data, updated data, deleted data, and device ID. +## KVStoreType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Readable

-

Writable

-

Description

-

insertEntries

-

Entry[]

-

Yes

-

Yes

-

Data inserted.

-

updateEntries

-

Entry[]

-

Yes

-

Yes

-

Data updated.

-

deleteEntries

-

Entry[]

-

Yes

-

Yes

-

Data deleted.

-

deviceId

-

string

-

Yes

-

Yes

-

UUID of the device.

-
- -## Entry - -Defines the key-value pairs stored in the database. - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Readable

-

Writable

-

Description

-

key

-

string

-

Yes

-

Yes

-

Key of the key-value pair stored in the database.

-

value

-

Value

-

Yes

-

Yes

-

Value of the key-value pair stored in the database.

-
- -## Value - -Defines the value in a key-value pair. - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Readable

-

Writable

-

Description

-

type

-

ValueType

-

Yes

-

Yes

-

Type of the value.

-

value

-

Uint8Array | string | number | boolean

-

Yes

-

Yes

-

Specific value. A value of the Uint8Array or string type cannot exceed MAX_VALUE_LENGTH.

-
- -## ValueType - -Defines the types of the value in a key-value pair. - -It can be used only by internal applications. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Default Value

-

Description

-

STRING

-

0

-

String.

-

INTEGER

-

1

-

Integer.

-

FLOAT

-

2

-

Float (single-precision floating point).

-

BYTE_ARRAY

-

3

-

Byte array.

-

BOOLEAN

-

4

-

Boolean.

-

DOUBLE

-

5

-

Double (double-precision floating point).

-
- -## SingleKVStore - -Provides methods to query and synchronize data in a single KV store. This class inherits from **KVStore**. Before calling any method in **SingleKVStore**, you must use **getKVStore** to create a **KVStore** object. - -### get - -get\(key: string, callback: AsyncCallback\): void +Defines the KV store types. -Obtains the value of a specified key. This method uses an asynchronous callback to return the result. +| Name| Default Value| Description| +| --- | ---- | ----------------------- | +| DEVICE_COLLABORATION | 0 | Device KV store.| +| SINGLE_VERSION | 1 | Single KV store.| +| MULTI_VERSION | 2 | Multi-version KV store. This type is not supported currently.| -- Parameters - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

key

-

string

-

Yes

-

Key of the value to obtain. It cannot be empty, and the length cannot exceed MAX_KEY_LENGTH.

-

callback

-

AsyncCallback<Uint8Array | string | boolean | number>

-

Yes

-

Callback invoked to return the value obtained.

-
+ +## SecurityLevel + +Defines the KV store security levels. + +| Name| Default Value| Description| +| --- | ---- | ----------------------- | +| NO_LEVEL | 0 | No security level is set for the KV store.| +| S0 | 1 | The KV store security level is public.| +| S1 | 2 | The KV store security level is low. If data leakage occurs, minor impact will be caused on the database.| +| S2 | 3 | The KV store security level is medium. If data leakage occurs, moderate impact will be caused on the database.| +| S3 | 5 | The KV store security level is high. If data leakage occurs, major impact will be caused on the database.| +| S4 | 6 | The KV store security level is critical. If data leakage occurs, severe impact will be caused on the database.| + + +## Constants + +Defines the KV store constants. + +| Name| Default Value| Description| +| --- | ---- | ----------------------- | +| MAX\_KEY_LENGTH| 1024 | Maximum length (in bytes) of a key in the KV store.| +| MAX\_VALUE_LENGTH| 4194303 | Maximum length (in bytes) of a value in the KV store.| +| MAX\_KEY\_LENGTH\_DEVICE| 896 | Maximum length of the device coordinate key.| +| MAX\_STORE\_ID\_LENGTH| 128 | Maximum length (in bytes) of a KV store ID.| +| MAX\_QUERY_LENGTH| 512000 | Maximum query length.| +| MAX\_BATCH_SIZE| 128 | Maximum size of a batch operation.| + +## Schema8+ ## + +Defines a database schema. When creating or opening a KV store, you can create **Schema** objects and put them into **Options**. + +### toJsonString8+ ### + +toJsonString():string; + +Obtains the schema in JSON format. + +- Return value + +| Type| Description| +| ------------- | -------------- | +| string |Schema in JSON format obtained.| - Example ``` - const KEY_TEST_STRING_ELEMENT = 'key_test_string'; - const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + import ddm from '@ohos.data.distributedData'; try { - kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { - if (err != undefined) { - console.log("put err: " + JSON.stringify(err)); - return; - } - console.log("put success"); - kvStore.get(KEY_TEST_STRING_ELEMENT, function (err,data) { - console.log("get success data: " + data); - }); - }); - }catch (e) { - console.log("An unexpected error occurred. Error:" + e); + let schema = new ddm.Schema(); + const str = schema.toJsonString(); + console.log("schema: " + str); + } catch (e) { + console.log("toJsonString " + e); } ``` -### get +## FieldNode8+ ## -get\(key: string\): Promise +Defines a node of a **Schema** instance. It provides methods for defining values stored in the KV store. -Obtains the value of a specified key. This method uses a promise to return the result. +### appendChild8+ ### + +appendChild(child: FieldNode): boolean; + +Adds a child node to this **FieldNode**. - Parameters - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

key

-

string

-

Yes

-

Key of the value to obtain. It cannot be empty, and the length cannot exceed MAX_KEY_LENGTH.

-
- -- Return values - - - - - - - - - - -

Type

-

Description

-

Promise<Uint8Array | string | boolean | number>

-

Promise used to return the result.

-
+| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| child | [FieldNode](#FieldNode) | Yes| Child node to add.| + +- Return value + +| Type| Description| +| ------------- | -------------- | +| boolean |Returns **true** if the operation is successful; returns **false** otherwise.| - Example ``` - const KEY_TEST_STRING_ELEMENT = 'key_test_string'; - const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + import ddm from '@ohos.data.distributedData'; try { - kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => { - console.log("put success: " + JSON.stringify(data)); - kvStore.get(KEY_TEST_STRING_ELEMENT).then((data) => { - console.log("get success data: " + data); - }).catch((err) => { - console.log("get err: " + JSON.stringify(err)); - }); + let node = new ddm.FieldNode("root"); + let child1 = new ddm.FieldNode("child1"); + let child2 = new ddm.FieldNode("child2"); + let child3 = new ddm.FieldNode("child3"); + node.appendChild(child1); + node.appendChild(child2); + node.appendChild(child3); + console.log("appendNode " + node.toJson()); + child1 = null; + child2 = null; + child3 = null; + node = null; + } catch (e) { + console.log("AppendChild " + e); + } + ``` + + +### toJson8+ ### + +toJson(): string; + +Obtains the field name. + +- Return value + +| Type| Description| +| ------ | -------------- | +| string |Field name obtained.| + +- Example + + ``` + import ddm from '@ohos.data.distributedData'; + try { + let node = new ddm.FieldNode("root"); + let child = new ddm.FieldNode("child"); + node.appendChild(child); + console.log("appendNode " + node.toJson()); + } catch (e) { + console.log("ToJson " + e); + } + ``` + + +## KvStoreResultSet8+ ## + +Provides methods to obtain the KV store result set and query or move the data read position. Before calling any method in **KvStoreResultSet**, you must use **KvStore** to create a **KvStore** instance. + +### getCount8+ ### + +getCount(): number; + +Obtains the number of rows in the result set. + +- Return value + +| Type| Description| +| ------ | -------------- | +| number |Number of rows obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; }).catch((err) => { - console.log("put err: " + JSON.stringify(err)); + console.log('getResultSet fail ' + err); }); - }catch (e) { - console.log("An unexpected error occurred. Error:" + e); + const count = resultSet.getCount(); + console.log("GetCount " + count); + } catch (e) { + console.log("GetCount fail " + e); } ``` -### sync +### getPosition8+ ### -sync\(deviceIdList: string\[\], mode: SyncMode, allowedDelayMs?: number\): void +getPosition(): number; -Triggers synchronization of the KV store, which is in manual synchronization mode. +Obtains the current data read position (position from which data is read) in the result set. -- Parameters +- Return value - - - - - - - - - - - - - - - - - - - - - - - -

Name

-

Type

-

Mandatory

-

Description

-

deviceIdList

-

string[]

-

Yes

-

List of IDs of the devices in the same networking environment to be synchronized.

-

mode

-

SyncMode

-

Yes

-

Synchronization mode.

-

allowedDelayMs

-

number

-

No

-

Allowed delay time, in ms.

-
+| Type| Description| +| ------ | -------------- | +| number |Current data read position obtained.| - Example ``` - kvStore.sync(deviceIds, 1, 1000); + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const positon = resultSet.getPosition(); + console.log("getPosition " + positon); + } catch (e) { + console.log("GetPosition fail " + e); + } ``` -## SyncMode +### moveToFirst8+ ### -Defines the synchronization mode. +moveToFirst(): boolean; + +Moves the data read position to the first row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the operation is successful; returns **false** otherwise.| - - - - - - - - - - - - - - - - - - - -

Name

-

Default Value

-

Description

-

PULL_ONLY

-

0

-

Pull data from the peer end to the local end only.

-

PUSH_ONLY

-

1

-

Push data from the local end to the peer end only.

-

PUSH_PULL

-

2

-

Push data from the local end to the peer end and then pull data from the peer end to the local end.

-
+- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.moveToFirst(); + console.log("moveToFirst " + moved); + } catch (e) { + console.log("MoveToFirst fail " + e); + } + ``` + + +### moveToLast8+ ### + +moveToLast(): boolean; + +Moves the data read position to the last row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the operation is successful; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.moveToLast(); + console.log("moveToLast " + moved); + } catch (e) { + console.log("moveToLast fail " + e); + } + ``` + + +### moveToNext8+ ### + +moveToNext(): boolean; + +Moves the data read position to the next row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the operation is successful; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.moveToNext(); + console.log("moveToNext " + moved); + } catch (e) { + console.log("moveToNext fail " + e); + } + ``` + + +### moveToPrevious8+ ### + +moveToPrevious(): boolean; + +Moves the data read position to the previous row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the operation is successful; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.moveToPrevious(); + console.log("moveToPrevious " + moved); + } catch (e) { + console.log("moveToPrevious fail " + e); + } + ``` + + +### move8+ ### + +move(offset: number): boolean; + +Moves the data read position with the specified offset from the current position. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| offset | number | Yes| Offset to move the data read position. A negative value means to move backward, and a positive value means to move forward.| + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the operation is successful; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.move(); + console.log("move " + moved); + } catch (e) { + console.log("move fail " + e); + } + ``` + + +### moveToPosition8+ ### + +moveToPosition(position: number): boolean; + +Moves the data read position from 0 to an absolute position. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| position | number | Yes|Absolute position to move to.| + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the operation is successful; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.moveToPosition(); + console.log("moveToPosition " + moved); + } catch (e) { + console.log("moveToPosition fail " + e); + } + ``` + + +### isFirst8+ ### + +isFirst(): boolean; + +Checks whether the data read position is the first row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the data read position is the first row; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.isFirst(); + console.log("isFirst " + moved); + } catch (e) { + console.log("isFirst fail " + e); + } + ``` + + +### isLast8+ ### + +isLast(): boolean; + +Checks whether the data read position is the last row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the data read position is the last row; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.isLast(); + console.log("isLast " + moved); + } catch (e) { + console.log("isLast fail " + e); + } + ``` + + +### isBeforeFirst8+ ### + +isBeforeFirst(): boolean; + +Checks whether the data read position is before the first row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the read position is before the first row; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.isBeforeFirst(); + console.log("isBeforeFirst " + moved); + } catch (e) { + console.log("isBeforeFirst fail " + e); + } + ``` + + +### isAfterLast8+ ### + +isAfterLast(): boolean; + +Checks whether the data read position is after the last row. + +- Return value + +| Type| Description| +| ------ | -------------- | +| boolean |Returns **true** if the data read position is after the last row; returns **false** otherwise.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.isAfterLast(); + console.log("isAfterLast " + moved); + } catch (e) { + console.log("isAfterLast fail " + e); + } + ``` + + +### getEntry8+ ### + +getEntry(): Entry; + +Obtains KV pairs. + +- Return value + +| Type| Description| +| ------ | ------- | +| Entry |KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + err); + }); + const moved = resultSet.moveToNext(); + const entry = resultSet.getEntry(); + console.log("getEntry " + JSON.stringify(entry)); + } catch (e) { + console.log("getEntry fail " + e); + } + ``` + + +## Query8+ ## + +Provides methods to create a **Query** object, which defines different data query criteria. + +### reset8+ ### + +reset(): Query; + +Resets the **Query** object that contains common query options. + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object reset.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.equalTo("key", "value"); + console.log("query is " + query.getSqlLike()); + query.reset(); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("simply calls should be ok :" + e); + } + ``` + + +### equalTo8+ ### + +equalTo(field: string, value: number|string|boolean): Query; + +Creates a **Query** object to match the specified field whose value is equal to the specified value. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| value | number/string/boolean | Yes| Value specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.equalTo("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### notEqualTo8+ ### + +notEqualTo(field: string, value: number|string|boolean): Query; + +Creates a **Query** object to match the specified field whose value is not equal to the specified value. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| value | number/string/boolean | Yes| Value specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notEqualTo("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### greaterThan8+ ### + +greaterThan(field: string, value: number|string|boolean): Query; + +Creates a **Query** object to match the specified field whose value is greater than the specified value. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| value | number/string/boolean | Yes| Value specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.greaterThan("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### lessThan8+ ### + +lessThan(field: string, value: number|string): Query; + +Creates a **Query** object to match the specified field whose value is less than the specified value. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| value | number/string/boolean | Yes| Value specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.lessThan("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### greaterThanOrEqualTo8+ ### + +greaterThanOrEqualTo(field: string, value: number|string): Query; + +Creates a **Query** object to match the specified field whose value is greater than or equal to the specified value. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| value | number/string/boolean | Yes| Value specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.greaterThanOrEqualTo("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### lessThanOrEqualTo8+ ### + +lessThanOrEqualTo(field: string, value: number|string): Query; + +Creates a **Query** object to match the specified field whose value is less than or equal to the specified value. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| value | number/string/boolean | Yes| Value specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.lessThanOrEqualTo("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### isNull8+ ### + +isNull(field: string): Query; + +Creates a **Query** object to match the specified field whose value is **null**. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.isNull("field"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### inNumber8+ ### + +inNumber(field: string, valueList: number[]): Query; + +Creates a **Query** object to match the specified field whose value is within the specified list of numbers. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| valueList | number[] | Yes| List of numbers.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.inNumber("field", [0, 1]); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### inString8+ ### + +inString(field: string, valueList: string[]): Query; + +Creates a **Query** object to match the specified field whose value is within the specified list of strings. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| valueList | string[] | Yes| List of strings.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.inString("field", ['test1', 'test2']); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### notInNumber8+ ### + +notInNumber(field: string, valueList: number[]): Query; + +Creates a **Query** object to match the specified field whose value is not within the specified list of numbers. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| valueList | number[] | Yes| List of numbers.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notInNumber("field", [0, 1]); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### notInString8+ ### + +notInString(field: string, valueList: string[]): Query; + +Creates a **Query** object to match the specified field whose value is not within the specified list of strings. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| valueList | string[] | Yes| List of strings.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notInString("field", ['test1', 'test2']); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### like8+ ### + +like(field: string, value: string): Query; + +Creates a **Query** object to match the specified field whose value is similar to the specified string. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| valueList | string | Yes| String specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.like("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### unlike8+ ### + +unlike(field: string, value: string): Query; + +Creates a **Query** object to match the specified field whose value is not similar to the specified string. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| +| valueList | string | Yes| String specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.unlike("field", "value"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### and8+ ### + +and(): Query; + +Creates a **Query** object with the AND condition. + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notEqualTo("field", "value1"); + query.and(); + query.notEqualTo("field", "value2"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### or8+ ### + +or(): Query; + +Creates a **Query** object with the OR condition. + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notEqualTo("field", "value1"); + query.or(); + query.notEqualTo("field", "value2"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### orderByAsc8+ ### + +orderByAsc(field: string): Query; + +Creates a **Query** object to sort the query results in ascending order. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notEqualTo("field", "value"); + query.orderByAsc("field"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### orderByDesc8+ ### + +orderByDesc(field: string): Query; + +Creates a **Query** object to sort the query results in descending order. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field to match. It must start with $ and cannot contain ^.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notEqualTo("field", "value"); + query.orderByDesc("field"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### limit8+ ### + +limit(total: number, offset: number): Query; + +Creates a **Query** object to specify the number of results and where to start. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| total | number | Yes|Number of results to query.| +| offset | number | Yes|Start position for query.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.notEqualTo("field", "value"); + query.limit("total", "offset"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### isNotNull8+ ### + +isNotNull(field: string): Query; + +Creates a **Query** object with a specified field that is not null. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| fieId | string | Yes|Field specified.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.isNotNull("field"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### beginGroup8+ ### + +beginGroup(): Query; + +Creates a **Query** object for a query condition group with a left parenthesis. + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.beginGroup(); + query.isNotNull("field"); + query.endGroup(); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### endGroup8+ ### + +endGroup(): Query; + +Creates a **Query** object for a query condition group with a right parenthesis. + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.beginGroup(); + query.isNotNull("field"); + query.endGroup(); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### prefixKey8+ ### + +prefixKey(prefix: string): Query; + +Creates a **Query** object with a specified key prefix. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| prefix | string | Yes|Key prefix.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.prefixKey("$.name"); + query.prefixKey("0"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### setSuggestIndex8+ ### + +setSuggestIndex(index: string): Query; + +Creates a **Query** object with an index preferentially used for query. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| index | string | Yes|Index preferentially used for query.| + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.setSuggestIndex("$.name"); + query.setSuggestIndex("0"); + console.log("query is " + query.getSqlLike()); + query = null; + } catch (e) { + console.log("dumplicated calls should be ok :" + e); + } + ``` + + +### deviceId8+ ### + +deviceId(deviceId:string):Query; + +Creates a **Query** object with the device ID as the key prefix. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId | string | Yes|Device ID.| + + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object created.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + query.deviceId("deviceId"); + console.log("query is " + query.getSqlLike()); + } catch (e) { + console.log("should be ok on Method Chaining : " + e); + } + ``` + + +### getSqlLike8+ ### + +getSqlLike():string; + +Obtains the query statement of this **Query** object. + +- Return value + +| Type| Description| +| ------ | ------- | +| [Query](#querysup8sup) |**Query** object.| + +- Example + + ``` + try { + let query = new distributedData.Query(); + let sql1 = query.getSqlLike(); + console.log("GetSqlLike sql=" + sql1); + } catch (e) { + console.log("dumplicated calls should be ok : " + e); + } + ``` + + +## KVStore + +Provides methods to manage data in a KV store, for example, adding or deleting data and subscribing to data changes or completion of data synchronization. Before calling any method in **KVStore**, you must use **getKVStore** to obtain a **KVStore** object. + +### put + +put(key: string, value: Uint8Array | string | number | boolean, callback: AsyncCallback<void>): void + +Adds a KV pair of the specified type to this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| key | string | Yes|Key of the KV pair to add. It cannot be empty, and the length cannot exceed [MAX\_KEY\_LENGTH](#constants).| +| value | Uint8Array / string / number / boolean | Yes|Value of the KV pair to add. The value type can be Uint8Array, number, string, or boolean. A value of the Uint8Array or string type cannot exceed [MAX\_VALUE\_LENGTH](#constants).| + + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { + if (err != undefined) { + console.log("put err: " + JSON.stringify(err)); + return; + } + console.log("put success"); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + + +### put + +put(key: string, value: Uint8Array | string | number | boolean): Promise<void> + +Adds a KV pair of the specified type to this KV store. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| key | string | Yes|Key of the KV pair to add. It cannot be empty, and the length cannot exceed [MAX\_KEY\_LENGTH](#constants).| +| value | Uint8Array / string / number / boolean | Yes|Value of the KV pair to add. The value type can be Uint8Array, number, string, or boolean. A value of the Uint8Array or string type cannot exceed [MAX\_VALUE\_LENGTH](#constants).| + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => { + console.log("put success: " + JSON.stringify(data)); + }).catch((err) => { + console.log("put err: " + JSON.stringify(err)); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + + +### delete + +delete(key: string, callback: AsyncCallback<void>): void + +Deletes a KV pair from this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| key | string | Yes|Key of the KV pair to delete. It cannot be empty, and the length cannot exceed [MAX\_KEY\_LENGTH](#constants).| +| callback | AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { + if (err != undefined) { + console.log("put err: " + JSON.stringify(err)); + return; + } + console.log("put success"); + kvStore.delete(KEY_TEST_STRING_ELEMENT, function (err,data) { + if (err != undefined) { + console.log("delete err: " + JSON.stringify(err)); + return; + } + console.log("delete success"); + }); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + + +### delete + +delete(key: string): Promise<void> + +Deletes a KV pair from this KV store. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| key | string | Yes|Key of the KV pair to delete. It cannot be empty, and the length cannot exceed [MAX\_KEY\_LENGTH](#constants).| + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => { + console.log("put success: " + JSON.stringify(data)); + kvStore.delete(KEY_TEST_STRING_ELEMENT).then((data) => { + console.log("delete success"); + }).catch((err) => { + console.log("delete err: " + JSON.stringify(err)); + }); + }).catch((err) => { + console.log("put err: " + JSON.stringify(err)); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + + +### on + +on(event: 'dataChange', type: SubscribeType, observer: Callback<ChangeNotification>): void + +Subscribes to data changes of the specified type. This method uses a synchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| event |'dataChange' | Yes|Type of the events to subscribe to.| +| type |[SubscribeType](#subscribetypea) | Yes|Type of data changes.| +| observer |Callback<[ChangeNotification](#changenotificationa)> | Yes|Callback used to return the result.| + + +- Example + + ``` + let kvStore; + kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_LOCAL, function (data) { + console.log("dataChange callback call data: " + JSON.stringify(data)); + }); + ``` + + +### on + +on(event: 'syncComplete', syncCallback: Callback8+ + +off(event:'dataChange', observer?: Callback<ChangeNotification>): void; + +Unsubscribes from data change events. This method uses a synchronouscallback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| event |'dataChange' | Yes|Type of the events to unsubscribe from.| +| observer |Callback<[ChangeNotification](#changenotificationa)> |No|Callback used to return the result.| + +- Example + + ``` + let kvStore; + kvStore.on('dataChange', function (data) { + console.log("syncComplete callback call data: " + data); + }); + kvStore.off('dataChange', function (data) { + console.log("syncComplete callback call data: " + data); + }); + ``` + + +### putBatch8+ + +putBatch(entries: Entry[], callback: AsyncCallback<void>): void; + +Inserts KV pairs in batches to this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| entries |[Entry](#entry)[] | Yes|KV pairs to insert in batches.| +| callback |Asyncallback<void> |Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + await kvStore.getEntries('batch_test_string_key', function (err,entrys) { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + + ``` + + +### putBatch8+ + +putBatch(entries: Entry[]): Promise<void>; + +Inserts KV pairs in batches to this KV store. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| entries |[Entry](#entry)[] | Yes|KV pairs to insert in batches.| + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + await kvStore.getEntries('batch_test_string_key').then((entrys) => { + console.log('getEntries success'); + console.log('PutBatch ' + JSON.stringify(entries)); + }).catch((err) => { + console.log('getEntries fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + ``` + + +### deleteBatch8+ + +deleteBatch(keys: string[], callback: AsyncCallback<void>): void; + +Deletes KV pairs in batches from this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| keys |string[] | Yes|KV pairs to delete in batches.| +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + let keys = []; + for (var i = 0; i < 5; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + keys.push(key + i); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + await kvStore.deleteBatch(keys, async function (err,data) { + console.log('deleteBatch success'); + }); + }); + }catch(e) { + console.log('DeleteBatch e ' + e); + } + ``` + + +### deleteBatch8+ ### + +deleteBatch(keys: string[]): Promise<void>; + +Deletes KV pairs in batches from this KV store. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| keys |string[] | Yes|KV pairs to delete in batches.| + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + let keys = []; + for (var i = 0; i < 5; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + keys.push(key + i); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + await kvStore.deleteBatch(keys).then((err) => { + console.log('deleteBatch success'); + }).catch((err) => { + console.log('deleteBatch fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('DeleteBatch e ' + e); + } + ``` + + +### startTransaction8+ ### + +startTransaction(callback: AsyncCallback<void>): void; + +Starts transactions in this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + function putBatchString(len, prefix) { + let entries = []; + for (var i = 0; i < len; i++) { + var entry = { + key : prefix + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + return entries; + } + try { + var count = 0; + kvStore.on('dataChange', 0, function (data) { + console.log('startTransaction 0' + data) + count++; + }); + kvStore.startTransaction(async function (err,data) { + console.log('startTransaction success'); + let entries = putBatchString(10, 'batch_test_string_key'); + console.log('entries: ' + JSON.stringify(entries)); + await kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + }); + }); + }catch(e) { + console.log('startTransaction e ' + e); + } + ``` + + +### startTransaction8+ ### + +startTransaction(): Promise<void>; + +Starts transactions in this KV store. This method uses a promise to return the result. + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + var count = 0; + kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_ALL, function (data) { + console.log('startTransaction ' + JSON.stringify(data)); + count++; + }); + kvStore.startTransaction().then(async (err) => { + console.log('startTransaction success'); + }).catch((err) => { + console.log('startTransaction fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('startTransaction e ' + e); + } + ``` + + +### commit8+ ### + +commit(callback: AsyncCallback<void>): void; + +Commits transactions in this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + try { + kvStore.commit(function (err,data) { + if (err == undefined) { + console.log('commit success'); + } else { + console.log('commit fail'); + } + }); + }catch(e) { + console.log('Commit e ' + e); + } + ``` + + +### commit8+ ### + +commit(): Promise<void>; + +Commits transactions in this KV store. This method uses a promise to return the result. + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + kvStore.commit().then(async (err) => { + console.log('commit success'); + }).catch((err) => { + console.log('commit fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('Commit e ' + e); + } + ``` + + +### rollback8+ ### + +rollback(callback: AsyncCallback<void>): void; + +Rolls back transactions in this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + try { + kvStore.rollback(function (err,data) { + if (err == undefined) { + console.log('commit success'); + } else { + console.log('commit fail'); + } + }); + }catch(e) { + console.log('Rollback e ' + e); + } + ``` + + +### rollback8+ ### + +rollback(): Promise<void>; + +Rolls back transactions in this KV store. This method uses a promise to return the result. + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + kvStore.rollback().then(async (err) => { + console.log('rollback success'); + }).catch((err) => { + console.log('rollback fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('Rollback e ' + e); + } + ``` + + +### enableSync8+ ### + +enableSync(enabled: boolean, callback: AsyncCallback<void>): void; + +Sets data synchronization, which can be enabled or disable. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| enabled |boolean | Yes|Whether to enable data synchronization. The value **true** means to enable data synchronization, and **false** means the opposite.| +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + try { + kvStore.enableSync(true, function (err,data) { + if (err == undefined) { + console.log('enableSync success'); + } else { + console.log('enableSync fail'); + } + }); + }catch(e) { + console.log('EnableSync e ' + e); + } + ``` + + +### enableSync8+ ### + +enableSync(enabled: boolean): Promise<void>; + +Sets data synchronization, which can be enabled or disable. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| enabled |boolean | Yes|Whether to enable data synchronization. The value **true** means to enable data synchronization, and **false** means the opposite.| + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + kvStore.enableSync(true).then((err) => { + console.log('enableSync success'); + }).catch((err) => { + console.log('enableSync fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('EnableSync e ' + e); + } + ``` + + +### setSyncRange8+ ### + +setSyncRange(localLabels: string[], remoteSupportLabels: string[], callback: AsyncCallback<void>): void; + +Sets the data synchronization range. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| localLabels |string[] | Yes|Synchronization labels set for the local device.| +| remoteSupportLabels |string[] | Yes|Synchronization labels set for remote devices.| +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + try { + const localLabels = ['A', 'B']; + const remoteSupportLabels = ['C', 'D']; + kvStore.setSyncRange(localLabels, remoteSupportLabels, function (err,data) { + console.log('SetSyncRange put success'); + }); + }catch(e) { + console.log('SetSyncRange e ' + e); + } + ``` + + +### setSyncRange8+ ### + +setSyncRange(localLabels: string[], remoteSupportLabels: string[]): Promise<void>; + +Sets the data synchronization range. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| localLabels |string[] | Yes|Synchronization labels set for the local device.| +| remoteSupportLabels |string[] | Yes|Synchronization labels set for remote devices.| + + +- Return value + +| Type| Description| +| ------ | ------- | +| Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + const localLabels = ['A', 'B']; + const remoteSupportLabels = ['C', 'D']; + kvStore.setSyncRange(localLabels, remoteSupportLabels).then((err) => { + console.log('setSyncRange success'); + }).catch((err) => { + console.log('delete fail ' + err); + }); + }catch(e) { + console.log('SetSyncRange e ' + e); + } + ``` + + +## SubscribeType + +Defines the subscription type. + +| Name| Default Value| Description| +| ----- | ------ | ----------------------- | +| SUBSCRIBE_TYPE_LOCAL |0 |Local data changes.| +| SUBSCRIBE_TYPE_REMOTE |1 |Remote data changes.| +| SUBSCRIBE_TYPE_ALL |2 |Local and remote data changes.| + +## ChangeNotification + +Defines the content of data change notifications, including inserted data, updated data, deleted data, and device ID. + +| Name| Type|Readable|Writable| Description| +| ----- | ------- | -----| ------|------------------------ | +| insertEntries | [Entry](#entry)[] | Yes| Yes|Data inserted.| +| updateEntries | [Entry](#entry)[] | Yes| Yes|Data updated.| +| deleteEntries | [Entry](#entry)[] | Yes| Yes|Data deleted.| +| deviceId | string | Yes| Yes|UUID of the device.| + +## Entry + +Defines the KV pairs stored in the KV store. + +| Name| Type|Readable|Writable| Description| +| ----- | ------- | -----| ------|------------------------ | +| key | string | Yes| Yes|Key of the KV pair stored in the KV store.| +| value | [Value](#value) | Yes| Yes|Value of the KV pair stored in the KV store.| + + +## Value + +Defines the value in a KV pair. + +| Name| Type|Readable|Writable| Description| +| ----- | ------- | -----| ------|------------------------ | +| type | [ValueType](#value) | Yes| Yes|Type of the value.| +| value | Uint8Array / string / number / boolean| Yes| Yes|Specific value.| + +## ValueType + +Enumerates the types of values in KV pairs. + +These value types can be used only by internal applications. + +| Name| Default Value| Description| +| ----- | ------ | ----------------------- | +| STRING |0 |String.| +| INTEGER |1 |Integer.| +| FLOAT |2 |Float (single-precision floating point).| +| BYTE_ARRAY |3 |Byte array.| +| BOOLEAN |4 |Boolean.| +| DOUBLE |5 |Double (double-precision floating point).| + +## SingleKVStore + +Provides methods to query and synchronize data in a single KV store. This class inherits from **KVStore**. Before calling any method in **SingleKVStore**, you must use **getKVStore** to obtain a **SingleKVStore** object. + +### get + +get(key: string, callback: AsyncCallback<Uint8Array | string | boolean | number>): void + +Obtains the value of a specified key. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| key |string | Yes|Key of the value to obtain. It cannot be empty, and the length cannot exceed [MAX\_KEY\_LENGTH](#constants).| +| callback |AsyncCallback<Uint8Array / string / boolean / number>) | Yes|Callback used to return the value obtained.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) { + if (err != undefined) { + console.log("put err: " + JSON.stringify(err)); + return; + } + console.log("put success"); + kvStore.get(KEY_TEST_STRING_ELEMENT, function (err,data) { + console.log("get success data: " + data); + }); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + + +### get + +get(key: string): Promise<Uint8Array | string | boolean | number> + +Obtains the value of a specified key. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| key |string | Yes|Key of the value to obtain. It cannot be empty, and the length cannot exceed [MAX\_KEY\_LENGTH](#constants).| + + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<Uint8Array / string / boolean / number> |Promise used to return the value obtained.| + + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => { + console.log("put success: " + JSON.stringify(data)); + kvStore.get(KEY_TEST_STRING_ELEMENT).then((data) => { + console.log("get success data: " + data); + }).catch((err) => { + console.log("get err: " + JSON.stringify(err)); + }); + }).catch((err) => { + console.log("put err: " + JSON.stringify(err)); + }); + }catch (e) { + console.log("An unexpected error occurred. Error:" + e); + } + ``` + +### getEntries8+ ### + +getEntries(keyPrefix: string, callback: AsyncCallback<Entry[]>): void; + +Obtains the KV pairs that match the specified key prefix. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| keyPrefix |string | Yes|Key prefix to match.| +| callback |AsyncCallback<Entry[]> | Yes|Callback used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_number_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.INTEGER, + value : 222 + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + await kvStore.getEntries('batch_test_number_key', function (err,entrys) { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(keyPrefix: string): Promise<Entry[]>; + +Obtains the KV pairs that match the specified key prefix. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| keyPrefix |string | Yes|Key prefix to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[Entry](#entry)[]> |Promise used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + console.log('entries: ' + entries); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + await kvStore.getEntries('batch_test_string_key').then((entrys) => { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + console.log('entrys[0].value: ' + JSON.stringify(entrys[0].value)); + console.log('entrys[0].value.value: ' + entrys[0].value.value); + }).catch((err) => { + console.log('getEntries fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(query: Query, callback: AsyncCallback<Entry[]>): void; + +Obtains the KV pairs that match the specified **Query** object. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<Entry[]> | Yes|Callback used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + var arr = new Uint8Array([21,31]); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_bool_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.BYTE_ARRAY, + value : arr + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getEntries(query, function (err,entrys) { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }); + }); + console.log('GetEntries success'); + }catch(e) { + console.log('GetEntries e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(query: Query): Promise<Entry[]>; + +Obtains the KV pairs that match the specified **Query** object. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[Entry](#entry)[]> |Promise used to return the KV pairs obtained.| + +- Example + + ``` + try { + var arr = new Uint8Array([21,31]); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_bool_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.BYTE_ARRAY, + value : arr + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getEntries(query).then((entrys) => { + console.log('getEntries success'); + }).catch((err) => { + console.log('getEntries fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('GetEntries putBatch fail ' + JSON.stringify(err)) + }); + console.log('GetEntries success'); + }catch(e) { + console.log('GetEntries e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(keyPrefix: string, callback: AsyncCallback<KvStoreResultSet>): void; + +Obtains the result set with the specified key prefix from this single KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| keyPrefix |string | Yes|Key prefix to match.| +| callback |AsyncCallback<[KvStoreResultSet](#kvstoreresultsetsup8sup)> | Yes|Callback used to return the result set obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('GetResultSet putBatch success'); + await kvStore.getResultSet('batch_test_string_key', async function (err, result) { + console.log('GetResultSet getResultSet success'); + resultSet = result; + kvStore.closeResultSet(resultSet, function (err, data) { + console.log('GetResultSet closeResultSet success'); + }) + }); + }); + }catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(keyPrefix: string): Promise<KvStoreResultSet>; + +Obtains the result set with the specified key prefix from this single KV store. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| keyPrefix |string | Yes|Key prefix to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[KvStoreResultSet](#kvstoreresultsetsup8sup)> |Promise used to return the result set obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('PutBatch putBatch fail ' + JSON.stringify(err)); + }); + kvStore.getResultSet('batch_test_string_key').then((result) => { + console.log('GetResult getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); + kvStore.closeResultSet(resultSet).then((err) => { + console.log('GetResult closeResultSet success'); + }).catch((err) => { + console.log('closeResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetResult e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(query: Query, callback: AsyncCallback<KvStoreResultSet>): void; + +Obtains the **KvStoreResultSet** object that matches the specified **Query** object. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |Query | Yes|**Query** object to match.| +| callback |AsyncCallback<[KvStoreResultSet](#kvstoreresultsetsup8sup)> | Yes|Callback used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getResultSet(query, async function (err, result) { + console.log('getResultSet success'); + resultSet = result; + }); + }); + } catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(query: Query): Promise<KvStoreResultSet>; + +Obtains the **KvStoreResultSet** object that matches the specified **Query** object. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[KvStoreResultSet](#kvstoreresultsetsup8sup)> |Promise used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSet(query).then((result) => { + console.log(' getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + +### closeResultSet8+ ### + +closeResultSet(resultSet: KvStoreResultSet, callback: AsyncCallback<void>): void; + +Closes the **KvStoreResultSet** object obtained by **getResultSet**. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| resultSet |[KvStoreResultSet](#kvstoreresultsetsup8sup) | Yes|**KvStoreResultSet** object to close.| +| callback |AsyncCallback<void> | Yes|Callback used to return the execution result.| + +- Example + + ``` + let kvStore; + try { + let resultSet = null; + kvStore.closeResultSet(resultSet, function (err, data) { + if (err == undefined) { + console.log('closeResultSet success'); + } else { + console.log('closeResultSet fail'); + } + }); + }catch(e) { + console.log('CloseResultSet e ' + e); + } + ``` + + +### closeResultSet8+ ### + +closeResultSet(resultSet: KvStoreResultSet): Promise<void>; + +Closes the **KvStoreResultSet** object obtained by **getResultSet**. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| resultSet |[KvStoreResultSet](#kvstoreresultsetsup8sup) | Yes|**KvStoreResultSet** object to close.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + let resultSet = null; + kvStore.closeResultSet(resultSet).then(() => { + console.log('closeResultSet success'); + }).catch((err) => { + console.log('closeResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('CloseResultSet e ' + e); + } + ``` + + +### getResultSize8+ ### + +getResultSize(query: Query, callback: AsyncCallback<number>): void; + +Obtains the number of results matching the specified **Query** object. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<number> | Yes|Callback used to return the number of results obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getResultSize(query, async function (err, resultSize) { + console.log('getResultSet success'); + }); + }); + } catch(e) { + console.log('GetResultSize e ' + e); + } + ``` + + +### getResultSize8+ ### + +getResultSize(query: Query): Promise<number>; + +Obtains the number of results matching the specified **Query** object. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<number> |Promise used to return the number of results obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSize(query).then((resultSize) => { + console.log('getResultSet success'); + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetResultSize e ' + e); + } + ``` + + +### removeDeviceData8+ ### + +removeDeviceData(deviceId: string, callback: AsyncCallback<void>): void; + +Deletes data of a device. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string_2'; + const VALUE_TEST_STRING_ELEMENT = 'value-string-002'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) { + console.log('put success'); + const deviceid = 'no_exist_device_id'; + await kvStore.removeDeviceData(deviceid, async function (err,data) { + if (err == undefined) { + console.log('removeDeviceData success'); + } else { + console.log('removeDeviceData fail'); + await kvStore.get(KEY_TEST_STRING_ELEMENT, async function (err,data) { + console.log('RemoveDeviceData get success'); + }); + } + }); + }); + }catch(e) { + console.log('RemoveDeviceData e ' + e); + } + ``` + + +### removeDeviceData8+ ### + +removeDeviceData(deviceId: string): Promise<void>; + +Deletes data of a device. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string_2'; + const VALUE_TEST_STRING_ELEMENT = 'value-string-001'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((err) => { + console.log('removeDeviceData put success'); + }).catch((err) => { + console.log('put fail ' + JSON.stringify(err)); + }); + const deviceid = 'no_exist_device_id'; + kvStore.removeDeviceData(deviceid).then((err) => { + console.log('removeDeviceData success'); + }).catch((err) => { + console.log('removeDeviceData fail ' + JSON.stringify(err)); + }); + kvStore.get(KEY_TEST_STRING_ELEMENT).then((data) => { + console.log('get success data:' + data); + }).catch((err) => { + console.log('RemoveDeviceData get fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('RemoveDeviceData e ' + e); + } + ``` + + +### on8+ ### + +on(event: 'syncComplete', syncCallback: Callback { + console.log('syncComplete put success'); + }).catch((error) => { + console.log('syncComplete put fail ' + error); + }); + }catch(e) { + console.log('syncComplete put e ' + e); + } + ``` + + +### off8+ ### + +off(event: 'syncComplete', syncCallback?: Callback8+ ### + +setSyncParam(defaultAllowedDelayMs: number, callback: AsyncCallback<void>): void; + +Sets the default delay of database synchronization. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| defaultAllowedDelayMs |number | Yes|Default delay allowed for database synchronization, in ms.| +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + + +- Example + + ``` + let kvStore; + try { + const defaultAllowedDelayMs = 500; + kvStore.setSyncParam(defaultAllowedDelayMs, function (err,data) { + console.log('SetSyncParam put success'); + }); + }catch(e) { + console.log('testSingleKvStoreSetSyncParam e ' + e); + } + ``` + + +### setSyncParam8+ ### + +setSyncParam(defaultAllowedDelayMs: number): Promise<void>; + +Sets the default delay of database synchronization. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| defaultAllowedDelayMs |number | Yes|Default delay allowed for database synchronization, in ms.| + + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + const defaultAllowedDelayMs = 500; + kvStore.setSyncParam(defaultAllowedDelayMs).then((err) => { + console.log('SetSyncParam put success'); + }).catch((err) => { + console.log('SetSyncParam put fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('SetSyncParam e ' + e); + } + ``` + + +### getSecurityLevel8+ ### + +getSecurityLevel(callback: AsyncCallback<SecurityLevel>): void; + +Obtains the security level of this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| callback |AsyncCallback<[SecurityLevel](#securitylevel)> | Yes|Callback used to return the security level obtained.| + +- Example + + ``` + let kvStore; + try { + kvStore.getSecurityLevel(function (err,data) { + console.log('getSecurityLevel success'); + }); + }catch(e) { + console.log('GetSecurityLeve e ' + e); + } + ``` + + +### getSecurityLevel8+ ### + +getSecurityLevel(): Promise<SecurityLevel>; + +Obtains the security level of this KV store. This method uses a promise to return the result. + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[SecurityLevel](#securitylevel)> |Promise used to return the security level obtained.| + + +- Example + + ``` + let kvStore; + try { + kvStore.getSecurityLevel().then((data) => { + console.log(' getSecurityLevel success'); + }).catch((err) => { + console.log('getSecurityLevel fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetSecurityLeve e ' + e); + } + ``` + + +## DeviceKVStore8+ ## + +Provides methods to manage distributed data by device in the distributed system. This class inherits from **KvStore** and provides data query and synchronization methods. Before calling any method in **DeviceKVStore**, you must use **getKVStore** to obtain a **DeviceKVStore** object. + +### get8+ ### + +get(deviceId: string, key: string, callback: AsyncCallback<boolean|string|number|Uint8Array>): void; + +Obtains the string value that matches the specified key for a device. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| key |string | Yes|Key to match.| +| callback |AsyncCallback<boolean/string/number/Uint8Array> | Yes|Callback used to return the value obtained.| + + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string_2'; + const VALUE_TEST_STRING_ELEMENT = 'value-string-002'; + try{ + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) { + console.log('put success'); + kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT, function (err,data) { + console.log('get success'); + }); + }) + }catch(e) { + console.log('get e' + e); + } + ``` + + +### get8+ ### + +get(deviceId: string, key: string): Promise<boolean|string|number|Uint8Array>; + +Obtains the string value that matches the specified key for a device. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| key |string | Yes|Key to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<boolean/string/number/Uint8Array> |Promise used to return the value obtained.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string_2'; + const VALUE_TEST_STRING_ELEMENT = 'value-string-002'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then(async (data) => { + console.log(' put success'); + kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT).then((data) => { + console.log('get success'); + }).catch((err) => { + console.log('get fail ' + JSON.stringify(err)); + }); + }).catch((error) => { + console.log('put error' + error); + }); + } catch (e) { + console.log('Get e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(deviceId: string, keyPrefix: string, callback: AsyncCallback<Entry[]>): void; + +Obtains the KV pairs that match the specified key prefix for a device. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| keyPrefix |string | Yes|Key prefix to match.| +| callback |AsyncCallback<[Entry](#entry)[]> | Yes|Callback used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + console.log('entries: ' + entries); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + await kvStore.getEntries('localDeviceId', 'batch_test_string_key', function (err,entrys) { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(deviceId: string, keyPrefix: string): Promise<Entry[]>; + +Obtains the KV pairs that match the specified key prefix for a device. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| keyPrefix |string | Yes|Key prefix to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[Entry](#entry)[]> |Promise used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + console.log('entries: ' + entries); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + await kvStore.getEntries('localDeviceId', 'batch_test_string_key').then((entrys) => { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + console.log('entrys[0].value: ' + JSON.stringify(entrys[0].value)); + console.log('entrys[0].value.value: ' + entrys[0].value.value); + }).catch((err) => { + console.log('getEntries fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('PutBatch e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(query: Query, callback: AsyncCallback<Entry[]>): void; + +Obtains the KV pairs matching the specified **Query** object. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<[Entry](#entry)[]> | Yes|Callback used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + var arr = new Uint8Array([21,31]); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_bool_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.BYTE_ARRAY, + value : arr + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + expect(err == undefined).assertTrue(); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + await kvStore.getEntries(query, function (err,entrys) { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }); + }); + console.log('GetEntries success'); + }catch(e) { + console.log('GetEntries e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(query: Query): Promise<Entry[]>; + +Obtains the KV pairs matching the specified **Query** object. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[Entry](#entry)[]> |Promise used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + var arr = new Uint8Array([21,31]); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_bool_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.BYTE_ARRAY, + value : arr + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getEntries(query).then((entrys) => { + console.log('getEntries success'); + }).catch((err) => { + console.log('getEntries fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('GetEntries putBatch fail ' + JSON.stringify(err)) + }); + console.log('GetEntries success'); + }catch(e) { + console.log('GetEntries e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(deviceId: string, query: Query, callback: AsyncCallback<Entry[]>): void; + +Obtains the KV pairs matching the specified **Query** object for a device. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<[Entry](#entry)[]> | Yes|Callback used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + var arr = new Uint8Array([21,31]); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_bool_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.BYTE_ARRAY, + value : arr + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries, async function (err,data) { + console.log('putBatch success'); + expect(err == undefined).assertTrue(); + var query = new distributedData.Query(); + query.deviceId('localDeviceId'); + query.prefixKey("batch_test"); + await kvStore.getEntries('localDeviceId', query, function (err,entrys) { + console.log('getEntries success'); + console.log('entrys.length: ' + entrys.length); + console.log('entrys[0]: ' + JSON.stringify(entrys[0])); + }) + }); + console.log('GetEntries success'); + }catch(e) { + console.log('GetEntries e ' + e); + } + ``` + + +### getEntries8+ ### + +getEntries(deviceId: string, query: Query): Promise<Entry[]>; + +Obtains the KV pairs matching the specified **Query** object for a device. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[Entry](#entry)[]> |Promise used to return the KV pairs obtained.| + +- Example + + ``` + let kvStore; + try { + var arr = new Uint8Array([21,31]); + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_bool_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.BYTE_ARRAY, + value : arr + } + } + entries.push(entry); + } + console.log('entries: ' + JSON.stringify(entries)); + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + var query = new distributedData.Query(); + query.deviceId('localDeviceId'); + query.prefixKey("batch_test"); + await kvStore.getEntries('localDeviceId', query).then((entrys) => { + console.log('getEntries success'); + }).catch((err) => { + console.log('getEntries fail ' + JSON.stringify(err)); + }); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + console.log('GetEntries success'); + }catch(e) { + console.log('GetEntries e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(deviceId: string, keyPrefix: string, callback: AsyncCallback<KvStoreResultSet>): void; + +Obtains the **KvStoreResultSet** object that matches the specified key prefix for a device. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| keyPrefix |string | Yes|Key prefix to match.| +| callback |AsyncCallback<[KvStoreResultSet](#kvstoreresultsetsup8sup)[]> | Yes|Callback used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('localDeviceId', 'batch_test_string_key', async function (err, result) { + console.log('getResultSet success'); + resultSet = result; + await kvStore.closeResultSet(resultSet, function (err, data) { + console.log('closeResultSet success'); + }) + }); + }catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(deviceId: string, keyPrefix: string): Promise<KvStoreResultSet>; + +Obtains the **KvStoreResultSet** object that matches the specified key prefix for a device. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| keyPrefix |string | Yes|Key prefix to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[KvStoreResultSet](#kvstoreresultsetsup8sup)[]> |Promise used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + kvStore.getResultSet('localDeviceId', 'batch_test_string_key').then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); + kvStore.closeResultSet(resultSet).then((err) => { + console.log('closeResultSet success'); + }).catch((err) => { + console.log('closeResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(query: Query, callback: AsyncCallback<KvStoreResultSet>): void; + +Obtains the **KvStoreResultSet** object that matches the specified **Query** object. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<[KvStoreResultSet](#kvstoreresultsetsup8sup)[]> | Yes|Callback used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + await kvStore.getResultSet(query, async function (err, result) { + console.log('getResultSet success'); + resultSet = result; + await kvStore.closeResultSet(resultSet, function (err, data) { + console.log('closeResultSet success'); + }) + }); + }); + } catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(query: Query): Promise<KvStoreResultSet>; + +Obtains the **KvStoreResultSet** object that matches the specified **Query** object. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[KvStoreResultSet](#kvstoreresultsetsup8sup)[]> |Promise used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + err); + }); + const query = new distributedData.Query(); + query.deviceId('localDeviceId'); + query.prefixKey("batch_test"); + console.log("GetResultSet " + query.getSqlLike()); + kvStore.getResultSet(query).then((result) => { + console.log('getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); + kvStore.closeResultSet(resultSet).then((err) => { + console.log('closeResultSet success'); + }).catch((err) => { + console.log('closeResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(deviceId: string, query: Query, callback: AsyncCallback<KvStoreResultSet>): void; + +Obtains the **KvStoreResultSet** object that matches the specified **Query** object for a device. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<[KvStoreResultSet](#kvstoreresultsetsup8sup)[]> | Yes|Callback used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getResultSet('localDeviceId', query, async function (err, result) { + console.log('getResultSet success'); + resultSet = result; + await kvStore.closeResultSet(resultSet, function (err, data) { + console.log('closeResultSet success'); + }) + }); + }); + } catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### getResultSet8+ ### + +getResultSet(deviceId: string, query: Query): Promise<KvStoreResultSet>; + +Obtains the **KvStoreResultSet** object that matches the specified **Query** object for a device. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<[KvStoreResultSet](#kvstoreresultsetsup8sup)[]> |Promise used to return the **KvStoreResultSet** object obtained.| + +- Example + + ``` + let kvStore; + try { + let resultSet; + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('GetResultSet putBatch success'); + }).catch((err) => { + console.log('PutBatch putBatch fail ' + JSON.stringify(err)); + }); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSet('localDeviceId', query).then((result) => { + console.log('GetResultSet getResultSet success'); + resultSet = result; + }).catch((err) => { + console.log('GetResultSet getResultSet fail ' + JSON.stringify(err)); + }); + query.deviceId('localDeviceId'); + console.log("GetResultSet " + query.getSqlLike()); + kvStore.closeResultSet(resultSet).then((err) => { + console.log('GetResultSet closeResultSet success'); + }).catch((err) => { + console.log('GetResultSet closeResultSet fail ' + JSON.stringify(err)); + }); + + }catch(e) { + console.log('GetResultSet e ' + e); + } + ``` + + +### closeResultSet8+ ### + +closeResultSet(resultSet: KvStoreResultSet, callback: AsyncCallback<void>): void; + +Closes the **KvStoreResultSet** object obtained by **getResultSet**. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| resultSet |[KvStoreResultSet](#getresultsetsup8sup) | Yes|**KvStoreResultSet** object to close.| +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + try { + console.log('CloseResultSet success'); + let resultSet = null; + kvStore.closeResultSet(resultSet, function (err, data) { + if (err == undefined) { + console.log('closeResultSet success'); + } else { + console.log('closeResultSet fail'); + } + }); + }catch(e) { + console.log('CloseResultSet e ' + e); + } + ``` + + +### closeResultSet8+ ### + +closeResultSet(resultSet: KvStoreResultSet): Promise<void>; + +Closes the **KvStoreResultSet** object obtained by **getResultSet**. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| resultSet |[KvStoreResultSet](#getresultsetsup8sup) | Yes|**KvStoreResultSet** object to close.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + try { + console.log('CloseResultSet success'); + let resultSet = null; + kvStore.closeResultSet(resultSet).then(() => { + console.log('closeResultSet success'); + }).catch((err) => { + console.log('closeResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('CloseResultSet e ' + e); + } + ``` + + +### getResultSize8+ ### + +getResultSize(query: Query, callback: AsyncCallback<number>): void; + +Obtains the number of results that matches the specified **Query** object. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<number> | Yes|Callback used to return the number of results obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + await kvStore.getResultSize(query, async function (err, resultSize) { + console.log('getResultSet success'); + }); + }); + } catch(e) { + console.log('GetResultSize e ' + e); + } + ``` + + +### getResultSize8+ ### + +getResultSize(query: Query): Promise<number>; + +Obtains the number of results that matches the specified **Query** object. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<number> |Promise used to return the number of results obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + query.deviceId('localDeviceId'); + kvStore.getResultSize(query).then((resultSize) => { + console.log('getResultSet success'); + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetResultSize e ' + e); + } + ``` + + +### getResultSize8+ ### + +getResultSize(deviceId: string, query: Query, callback: AsyncCallback<number>): void; + +Obtains the number of results that matches the specified **Query** object for a device. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| +| callback |AsyncCallback<number> | Yes|Callback used to return the number of results obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries, async function (err, data) { + console.log('putBatch success'); + const query = new distributedData.Query(); + query.prefixKey("batch_test"); + await kvStore.getResultSize('localDeviceId', query, async function (err, resultSize) { + console.log('getResultSet success'); + }); + }); + } catch(e) { + console.log('GetResultSize e ' + e); + } + ``` + + +### getResultSize8+ ### + +getResultSize(deviceId: string, query: Query): Promise<number>; + +Obtains the number of results that matches the specified **Query** object for a device. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| query |[Query](#querysup8sup) | Yes|**Query** object to match.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<number> |Promise used to return the number of results obtained.| + +- Example + + ``` + let kvStore; + try { + let entries = []; + for (var i = 0; i < 10; i++) { + var key = 'batch_test_string_key'; + var entry = { + key : key + i, + value : { + type : distributedData.ValueType.STRING, + value : 'batch_test_string_value' + } + } + entries.push(entry); + } + kvStore.putBatch(entries).then(async (err) => { + console.log('putBatch success'); + }).catch((err) => { + console.log('putBatch fail ' + JSON.stringify(err)); + }); + var query = new distributedData.Query(); + query.prefixKey("batch_test"); + kvStore.getResultSize('localDeviceId', query).then((resultSize) => { + console.log('getResultSet success'); + }).catch((err) => { + console.log('getResultSet fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('GetResultSize e ' + e); + } + ``` + + +### removeDeviceData8+ ### + +removeDeviceData(deviceId: string, callback: AsyncCallback<void>): void; + +Removes data of a device from this KV store. This method uses an asynchronous callback to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| +| callback |AsyncCallback<void> | Yes|Callback used to return the result.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-string-001'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) { + console.log('RemoveDeviceData put success'); + const deviceid = 'no_exist_device_id'; + await kvStore.removeDeviceData(deviceid, async function (err,data) { + if (err == undefined) { + console.log('removeDeviceData success'); + } else { + console.log('removeDeviceData fail'); + await kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT, async function (err,data) { + console.log('RemoveDeviceData get success'); + }); + } + }); + }); + }catch(e) { + console.log('RemoveDeviceData e ' + e); + } + ``` + + +### removeDeviceData8+ ### + +removeDeviceData(deviceId: string): Promise<void>; + +Removes data of a device from this KV store. This method uses a promise to return the result. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceId |string | Yes|ID of the target device.| + +- Return value + +| Type| Description| +| ------ | ------- | +|Promise<void> |Promise used to return the result.| + +- Example + + ``` + let kvStore; + const KEY_TEST_STRING_ELEMENT = 'key_test_string'; + const VALUE_TEST_STRING_ELEMENT = 'value-string-001'; + try { + kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((err) => { + console.log('RemoveDeviceData put success'); + }).catch((err) => { + console.log('RemoveDeviceData put fail ' + JSON.stringify(err)); + }); + const deviceid = 'no_exist_device_id'; + kvStore.removeDeviceData(deviceid).then((err) => { + console.log('removeDeviceData success'); + }).catch((err) => { + console.log('removeDeviceData fail ' + JSON.stringify(err)); + }); + kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT).then((data) => { + console.log('RemoveDeviceData get success data:' + data); + }).catch((err) => { + console.log('RemoveDeviceData get fail ' + JSON.stringify(err)); + }); + }catch(e) { + console.log('RemoveDeviceData e ' + e); + } + ``` + + +### sync8+ ### + +sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void; + +Manually triggers KV store synchronization synchronously. + +- Parameters + +| Name| Type| Mandatory| Description| +| ----- | ------ | ---- | ----------------------- | +| deviceIdList |string[] | Yes|IDs of the devices to be synchronized.| +| mode |[SyncMode](#syncmode) | Yes|Data synchronization mode, which can be **PUSH**, **PULL**, or **PUSH_PULL**.| +| allowedDelayMs |number | No|Allowed synchronization delay time, in ms.| + + +- Example + + ``` + let kvStore; + const KEY_TEST_SYNC_ELEMENT = 'key_test_sync'; + const VALUE_TEST_SYNC_ELEMENT = 'value-string-001'; + try { + kvStore.on('syncComplete', function (data) { + console.log('Sync dataChange'); + }); + kvStore.put(KEY_TEST_SYNC_ELEMENT + 'testSync101', VALUE_TEST_SYNC_ELEMENT, function (err,data) { + console.log('Sync put success'); + const devices = ['deviceList']; + const mode = distributedData.SyncMode.PULL_ONLY; + kvStore.sync(devices, mode); + }); + }catch(e) { + console.log('Sync e' + e); + } + ``` + +### on8+ ### + +on(event: 'syncComplete', syncCallback: Callback { + console.log('syncComplete put success'); + }).catch((error) => { + console.log('syncComplete put fail ' + error); + }); + }catch(e) { + console.log('syncComplete put e ' + e); + } + ``` + + +### off8+ ### + +off(event: 'syncComplete', syncCallback?: Callback