From c13531f6850a9d1397189c6db0e42de8bcaa5c8c Mon Sep 17 00:00:00 2001 From: htt1997 Date: Thu, 25 Jan 2024 20:01:33 +0800 Subject: [PATCH] update Signed-off-by: htt1997 --- data_object/CMakeLists.txt | 5 +- data_object/data_object.gni | 2 + .../include/adaptor/asset_change_timer.h | 13 +- .../adaptor/distributed_objectstore_impl.h | 3 +- .../include/adaptor/flat_object_store.h | 7 +- .../include/adaptor/object_storage_engine.h | 3 +- .../innerkitsimpl/include/adaptor/watcher.h | 4 +- .../include/common/object_types_util.h | 9 +- .../include/communicator/softbus_adapter.h | 1 - .../src/adaptor/asset_change_timer.cpp | 33 +- .../adaptor/distributed_object_store_impl.cpp | 17 +- .../adaptor/flat_object_storage_engine.cpp | 10 +- .../src/adaptor/flat_object_store.cpp | 34 +- .../process_communicator_impl.cpp | 2 - .../communicator/softbus_adapter_standard.cpp | 3 +- .../innerkitsimpl/src/object_types_util.cpp | 12 + .../test/fuzztest/objectstore_fuzzer/BUILD.gn | 6 +- .../objectstore_fuzzer/objectstore_fuzzer.cpp | 6 +- .../innerkitsimpl/test/unittest/BUILD.gn | 4 +- .../mock/include/mock_flat_object_watcher.h | 3 +- .../test/unittest/src/communicator_test.cpp | 13 + .../test/unittest/src/object_store_test.cpp | 37 +- .../jskitsimpl/include/adaptor/js_watcher.h | 15 +- .../include/adaptor/notifier_impl.h | 4 +- .../src/adaptor/js_object_wrapper.cpp | 4 + .../jskitsimpl/src/adaptor/js_watcher.cpp | 22 +- .../jskitsimpl/src/adaptor/notifier_impl.cpp | 13 +- .../jskitsimpl/src/common/js_util.cpp | 40 +- .../unittest/src/ObjectStoreJsunitV9.test.js | 358 +++- data_object/interfaces/innerkits/BUILD.gn | 2 +- .../interfaces/innerkits/object_types.h | 4 +- data_object/interfaces/jskits/BUILD.gn | 2 +- data_share/README_zh.md | 8 +- data_share/bundle.json | 3 +- data_share/datashare.gni | 2 + .../include/datashare_predicates_proxy.h | 3 +- .../include/datashare_result_set_proxy.h | 5 +- .../js/napi/common/src/datashare_js_utils.cpp | 4 +- .../common/src/datashare_predicates_proxy.cpp | 13 +- .../common/src/datashare_result_set_proxy.cpp | 20 +- .../frameworks/js/napi/dataShare/BUILD.gn | 48 +- .../dataShare/include/napi_datashare_helper.h | 4 + .../napi/dataShare/libdatashare_jscommon.map | 21 + .../dataShare/src/napi_datashare_helper.cpp | 54 + .../dataShare/src/native_datashare_module.cpp | 2 + .../native/common/include/callbacks_manager.h | 55 +- .../common/include/datashare_abs_result_set.h | 68 - ...ibuteddata_data_share_ipc_interface_code.h | 2 + .../common/include/idata_share_service.h | 4 + .../common/src/datashare_abs_result_set.cpp | 18 +- .../common/src/ikvstore_data_service.cpp | 1 - .../controller/common/general_controller.h | 5 +- .../consumer/include/datashare_connection.h | 4 +- .../native/consumer/include/datashare_proxy.h | 1 + .../consumer/src/datashare_connection.cpp | 93 +- .../native/consumer/src/datashare_helper.cpp | 26 +- .../consumer/src/datashare_helper_impl.cpp | 2 - .../native/consumer/src/datashare_proxy.cpp | 32 +- .../include/js_datashare_ext_ability.h | 14 +- .../native/provider/src/datashare_stub.cpp | 4 +- .../provider/src/datashare_stub_impl.cpp | 10 +- .../provider/src/datashare_uv_queue.cpp | 6 +- .../provider/src/js_datashare_ext_ability.cpp | 62 +- .../proxy/include/data_share_manager_impl.h | 4 +- .../proxy/include/data_share_service_proxy.h | 4 + .../native/proxy/src/ams_mgr_proxy.cpp | 21 +- .../proxy/src/data_share_manager_impl.cpp | 18 +- .../proxy/src/data_share_service_proxy.cpp | 51 + .../src/published_data_subscriber_manager.cpp | 26 +- .../proxy/src/rdb_subscriber_manager.cpp | 25 +- data_share/interfaces/inner_api/BUILD.gn | 20 +- .../interfaces/inner_api/common/BUILD.gn | 9 - .../common/include/datashare_abs_predicates.h | 4 +- .../include/datashare_operation_statement.h | 2 +- .../consumer/include/datashare_helper.h | 12 +- .../provider/include/result_set_bridge.h | 4 - data_share/test/js/data_share/BUILD.gn | 23 + .../test/js/data_share/unittest/config.json | 63 + .../js/data_share/unittest/openharmony_sx.p7b | Bin 0 -> 3437 bytes .../test/js/data_share/unittest/src/BUILD.gn | 29 + .../src/DataShareSilentAccessJsunit.test.js | 120 ++ data_share/test/native/BUILD.gn | 28 + .../DataShareExtAbility.ts | 94 +- .../src/main/ets/MainAbility/MainAbility.ts | 6 +- .../DataShareExtAbility.ts | 98 +- .../native/resource/ohos_test/ohos_test.xml | 9 + .../src/mediadatashare_unit_test.cpp | 10 +- .../src/slientswitch_test.cpp | 537 +++++ datamgr_service/bundle.json | 6 +- datamgr_service/conf/config.json | 3 +- .../distributeddataservice/adapter/BUILD.gn | 4 + .../adapter/CMakeLists.txt | 2 +- .../adapter/account/BUILD.gn | 6 + .../account/src/account_delegate_impl.h | 4 +- .../adapter/broadcaster/BUILD.gn | 6 + .../adapter/communicator/BUILD.gn | 7 +- .../communicator/src/communicator_context.cpp | 23 + .../src/device_manager_adapter.cpp | 81 +- .../src/process_communicator_impl.cpp | 9 +- .../communicator/src/softbus_adapter.h | 33 +- .../src/softbus_adapter_standard.cpp | 352 ++-- .../communicator/src/softbus_client.cpp | 230 +-- .../adapter/communicator/src/softbus_client.h | 70 +- .../softbusadapter_fuzzer.cpp | 2 +- .../adapter/dfx/BUILD.gn | 6 + .../communicator/communicator_context.h | 10 +- .../communicator/device_manager_adapter.h | 14 +- .../communicator/process_communicator_impl.h | 2 + .../adapter/permission/BUILD.gn | 6 + .../adapter/utils/BUILD.gn | 6 + .../distributeddataservice/app/BUILD.gn | 6 + .../app/distributed_data.cfg | 3 +- .../app/src/checker/BUILD.gn | 6 + .../app/src/flowctrl_manager/BUILD.gn | 6 + .../app/src/installer/BUILD.gn | 6 + .../app/src/installer/installer_impl.cpp | 19 +- .../app/src/kvstore_data_service.cpp | 16 +- .../app/src/kvstore_meta_manager.cpp | 69 +- .../app/src/kvstore_meta_manager.h | 9 +- .../app/src/security/sensitive.cpp | 2 +- .../app/src/security/sensitive.h | 2 +- .../route_head_handler_impl.cpp | 4 +- .../kvstore_data_service_clear_test.cpp | 1 + .../distributeddataservice/framework/BUILD.gn | 6 + .../framework/CMakeLists.txt | 2 +- .../framework/cloud/cloud_db.cpp | 5 + .../framework/include/cloud/cloud_db.h | 2 + .../include/metadata/store_meta_data.h | 1 + .../framework/include/snapshot/bind_event.h | 1 + .../framework/include/store/general_store.h | 5 +- .../framework/metadata/store_meta_data.cpp | 5 +- .../rust/connect_adapter}/BUILD.gn | 40 +- .../rust/connect_adapter/include/connect.h | 52 + .../connect_adapter/include/connect_wrapper.h | 19 +- .../rust/connect_adapter/src/connect.cpp | 111 + .../connect_adapter/src/connect_wrapper.cpp | 42 +- .../rust/extension/BUILD.gn | 60 + .../rust/extension/asset_loader_impl.cpp | 104 + .../rust/extension/asset_loader_impl.h | 44 + .../rust/extension/cloud_cursor_impl.cpp | 305 +++ .../rust/extension/cloud_cursor_impl.h | 74 + .../rust/extension/cloud_db_impl.cpp | 165 ++ .../rust/extension/cloud_db_impl.h | 52 + .../rust/extension/cloud_server_impl.cpp | 637 ++++++ .../rust/extension/cloud_server_impl.h | 64 + .../rust/extension/extension_util.cpp | 528 +++++ .../rust/extension/extension_util.h | 67 + .../rust/ylong_cloud_extension/BUILD.gn | 56 + .../rust/ylong_cloud_extension/Cargo.toml | 37 + .../rust/ylong_cloud_extension/README.md | 0 .../rust/ylong_cloud_extension/README_zh.md | 0 .../include/basic_rust_types.h | 189 ++ .../include/cloud_ext_types.h | 637 ++++++ .../include/cloud_extension.h | 364 ++++ .../ylong_cloud_extension/include/error.h | 55 + .../src/c_adapter/basic_rust_types.rs | 1312 ++++++++++++ .../src/c_adapter/cloud_ext_types.rs | 1652 +++++++++++++++ .../src/c_adapter/cloud_extension.rs | 696 +++++++ .../src/c_adapter/mod.rs | 231 +++ .../src/ipc_conn/asset.rs | 322 +++ .../src/ipc_conn/connect.rs | 1795 +++++++++++++++++ .../src/ipc_conn/database.rs | 386 ++++ .../src/ipc_conn/error.rs | 139 ++ .../ylong_cloud_extension/src/ipc_conn/ffi.rs | 22 + .../src/ipc_conn/function.rs | 41 + .../ylong_cloud_extension/src/ipc_conn/mod.rs | 146 ++ .../rust/ylong_cloud_extension/src/lib.rs | 40 + .../src/service_impl/asset_loader.rs | 127 ++ .../src/service_impl/cloud_db.rs | 376 ++++ .../src/service_impl/cloud_service.rs | 295 +++ .../src/service_impl/error.rs | 120 ++ .../src/service_impl/mod.rs | 29 + .../src/service_impl/types.rs | 319 +++ .../rust/ylong_cloud_extension/tests/demo.txt | 301 +++ .../distributeddataservice/service/BUILD.gn | 7 +- .../service/CMakeLists.txt | 2 +- .../service/backup/src/backup_manager.cpp | 4 +- .../service/cloud/cloud_service_impl.cpp | 189 +- .../service/cloud/cloud_service_impl.h | 15 +- .../service/cloud/cloud_value_util.cpp | 6 +- .../service/cloud/cloud_value_util.h | 4 +- .../service/cloud/sync_manager.cpp | 44 +- .../service/cloud/sync_manager.h | 3 + .../service/common/value_proxy.cpp | 22 +- .../service/common/value_proxy.h | 12 +- .../service/data_share/BUILD.gn | 8 + .../data_share/common/bundle_mgr_proxy.cpp | 13 + .../data_share/common/bundle_mgr_proxy.h | 7 +- .../data_share/common/scheduler_manager.cpp | 12 +- .../service/data_share/common/uri_utils.cpp | 10 + .../service/data_share/common/uri_utils.h | 1 + .../data_share/data_share_profile_config.cpp | 55 + .../data_share/data_share_profile_config.h | 33 + .../data_share/data_share_service_impl.cpp | 70 +- .../data_share/data_share_service_impl.h | 7 + .../data_share/data_share_service_stub.cpp | 31 + .../data_share/data_share_service_stub.h | 6 +- .../data_share/data_share_silent_config.cpp | 97 + .../data_share/data_share_silent_config.h | 56 +- .../service/data_share/idata_share_service.h | 4 + ...g_from_data_share_bundle_info_strategy.cpp | 8 +- .../general/load_config_common_strategy.cpp | 12 +- .../general/load_config_common_strategy.h | 3 - .../load_config_data_info_strategy.cpp | 2 +- .../rdb_subscriber_manager.cpp | 5 +- .../service/kvdb/kvdb_service_impl.cpp | 47 +- .../service/kvdb/kvdb_service_impl.h | 1 - .../service/kvdb/kvstore_sync_manager.cpp | 8 +- .../service/kvdb/store_cache.cpp | 1 + .../service/matrix/include/device_matrix.h | 6 +- .../service/matrix/src/device_matrix.cpp | 15 + .../service/object/object_asset_loader.cpp | 34 +- .../service/object/object_asset_loader.h | 4 +- .../service/object/object_asset_machine.cpp | 158 +- .../service/object/object_asset_machine.h | 10 +- .../service/object/object_common.h | 8 + .../service/object/object_manager.cpp | 94 +- .../service/object/object_manager.h | 13 +- .../service/object/object_service_impl.cpp | 20 +- .../service/object/object_service_stub.cpp | 44 +- .../service/object/object_snapshot.cpp | 16 +- .../service/object/object_types_utils.cpp | 6 + .../service/object/object_types_utils.h | 5 +- .../service/rdb/rdb_asset_loader.cpp | 24 +- .../service/rdb/rdb_asset_loader.h | 4 +- .../service/rdb/rdb_cloud.cpp | 17 +- .../service/rdb/rdb_cloud.h | 1 + .../service/rdb/rdb_general_store.cpp | 156 +- .../service/rdb/rdb_general_store.h | 14 +- .../service/rdb/rdb_notifier_proxy.cpp | 2 - .../service/rdb/rdb_query.cpp | 4 +- .../service/rdb/rdb_service_impl.cpp | 33 +- .../service/test/BUILD.gn | 57 +- .../service/test/config_factory_test.cpp | 2 - .../service/test/device_matrix_test.cpp | 23 +- .../datashareservicestub_fuzzer/BUILD.gn | 2 + .../objectservicestub_fuzzer/BUILD.gn | 2 +- .../service/test/meta_data_test.cpp | 164 ++ .../service/test/mock/general_store_mock.cpp | 5 +- .../service/test/mock/general_store_mock.h | 5 +- .../test/object_asset_machine_test.cpp | 65 +- .../service/udmf/BUILD.gn | 6 + .../service/udmf/store/runtime_store.cpp | 59 +- .../service/udmf/store/runtime_store.h | 4 +- .../service/udmf/utd/custom_utd_installer.cpp | 13 +- .../service/udmf/utd/custom_utd_installer.h | 4 +- .../api/@ohos.data.DataShareResultSet.d.ts | 2 +- .../api/@ohos.data.ValuesBucket.d.ts | 8 +- interface_sdk/api/@ohos.data.cloudData.d.ts | 72 +- .../api/@ohos.data.cloudExtension.d.ts | 1046 +++++++++- interface_sdk/api/@ohos.data.commonType.d.ts | 2 +- interface_sdk/api/@ohos.data.dataShare.d.ts | 160 +- .../api/@ohos.data.dataSharePredicates.d.ts | 2 +- .../api/@ohos.data.distributedDataObject.d.ts | 6 +- interface_sdk/api/@ohos.data.preferences.d.ts | 18 +- .../api/@ohos.data.relationalStore.d.ts | 31 +- .../api/@ohos.data.unifiedDataChannel.d.ts | 527 ++++- .../api/@ohos.data.uniformTypeDescriptor.d.ts | 100 + kv_store/frameworks/CMakeLists.txt | 2 +- kv_store/frameworks/common/itypes_util.h | 2 +- kv_store/frameworks/common/test/BUILD.gn | 19 + .../common/test/priority_queue_test.cpp | 530 +++++ .../include/kvstore_datashare_bridge.h | 2 +- .../test/unittest/device_kvstore_test.cpp | 2 +- .../test/unittest/kv_utils_test.cpp | 6 +- .../kvstore_datashare_bridge_test.cpp | 5 +- .../unittest/single_kvstore_client_test.cpp | 12 +- .../kvdb/include/auto_sync_timer.h | 2 +- .../kvdb/include/observer_bridge.h | 2 +- .../innerkitsimpl/kvdb/src/kv_types_util.cpp | 2 + .../test/single_store_impl_get_top_test.cpp | 2 +- .../kvdb/test/single_store_impl_test.cpp | 1 + .../distributeddata/src/js_kv_store.cpp | 2 +- .../distributeddata/src/js_util.cpp | 2 +- .../distributedkvstore/src/js_error_utils.cpp | 2 +- .../distributedkvstore/src/js_util.cpp | 15 +- kv_store/frameworks/libs/CMakeLists.txt | 14 +- .../frameworks/libs/distributeddb/BUILD.gn | 13 + .../libs/distributeddb/cfi_blocklist.txt | 17 + .../common/include/auto_launch.h | 4 +- .../include/cloud/asset_operation_utils.h | 1 + .../common/include/concurrent_adapter.h | 10 +- .../common/include/db_constant.h | 2 + .../distributeddb/common/src/auto_launch.cpp | 24 +- .../src/cloud/asset_operation_utils.cpp | 37 +- .../common/src/concurrent_adapter.cpp | 26 +- .../distributeddb/common/src/db_constant.cpp | 2 +- .../common/src/param_check_utils.cpp | 4 + .../common/src/platform_specific.cpp | 5 +- .../common/src/query_expression.cpp | 2 +- .../relational/relational_schema_object.cpp | 5 +- .../common/src/relational/table_info.cpp | 2 +- .../common/src/relational/tracker_table.cpp | 2 +- .../common/src/runtime_context_impl.cpp | 1 - .../common/src/runtime_context_impl.h | 6 +- .../common/src/user_change_monitor.cpp | 1 - .../include/communicator_aggregator.h | 11 +- .../communicator/include/network_adapter.h | 1 + .../src/communicator_aggregator.cpp | 39 +- .../communicator/src/network_adapter.cpp | 6 + .../libs/distributeddb/distributeddb.gni | 134 +- .../libs/distributeddb/gaussdb_rd/BUILD.gn | 6 + .../gaussdb_rd/include/grd_base/grd_db_api.h | 2 - .../gaussdb_rd/src/common/include/db_config.h | 1 + .../src/common/include/grd_api_manager.h | 3 - .../gaussdb_rd/src/common/src/db_config.cpp | 17 +- .../src/common/src/grd_api_manager.cpp | 2 - .../src/executor/base/grd_db_api.cpp | 12 - .../src/executor/base/grd_db_api_inner.cpp | 5 - .../src/executor/include/grd_db_api_inner.h | 2 - .../test/unittest/api/documentdb_api_test.cpp | 20 + .../distributeddb/include/query_expression.h | 2 +- .../include/cloud/cloud_store_types.h | 11 + .../interfaces/include/cloud/icloud_db.h | 1 + .../include/iprocess_communicator.h | 6 + .../src/kv_store_nb_delegate_impl.cpp | 6 +- .../src/kv_store_nb_delegate_impl.h | 3 +- .../relational_store_delegate_impl.cpp | 5 - .../relational/relational_sync_able_storage.h | 6 + .../include/cloud/cloud_storage_utils.h | 21 +- .../storage/include/storage_proxy.h | 2 +- .../storage/src/cloud/cloud_storage_utils.cpp | 161 +- .../storage/src/cloud/schema_mgr.cpp | 7 +- ...rd_single_ver_natural_store_connection.cpp | 48 +- .../rd_single_ver_natural_store_connection.h | 2 +- .../rd_single_ver_storage_engine.cpp | 22 - .../gaussdb_rd/rd_single_ver_storage_engine.h | 2 - .../rd_single_ver_storage_executor.cpp | 98 +- .../rd_single_ver_storage_executor.h | 24 +- .../storage/src/gaussdb_rd/rd_utils.cpp | 5 - .../storage/src/gaussdb_rd/rd_utils.h | 2 - .../storage/src/{ => kv}/generic_kvdb.cpp | 0 .../storage/src/{ => kv}/generic_kvdb.h | 0 .../src/{ => kv}/generic_kvdb_connection.cpp | 0 .../src/{ => kv}/generic_kvdb_connection.h | 0 .../{ => kv}/generic_single_ver_kv_entry.cpp | 0 .../{ => kv}/generic_single_ver_kv_entry.h | 0 .../kvdb_commit_notify_filterable_data.cpp | 0 .../kvdb_commit_notify_filterable_data.h | 0 .../storage/src/{ => kv}/kvdb_manager.cpp | 4 +- .../src/{ => kv}/kvdb_observer_handle.cpp | 0 .../src/{ => kv}/kvdb_observer_handle.h | 0 .../storage/src/{ => kv}/kvdb_properties.cpp | 0 .../storage/src/{ => kv}/kvdb_utils.cpp | 0 .../storage/src/{ => kv}/kvdb_utils.h | 0 .../src/{ => kv}/kvdb_windowed_result_set.cpp | 0 .../src/{ => kv}/kvdb_windowed_result_set.h | 0 .../storage/src/{ => kv}/local_kvdb.h | 0 .../storage/src/{ => kv}/sync_able_kvdb.cpp | 8 +- .../storage/src/{ => kv}/sync_able_kvdb.h | 0 .../{ => kv}/sync_able_kvdb_connection.cpp | 0 .../src/{ => kv}/sync_able_kvdb_connection.h | 0 .../storage/src/package_file.cpp | 28 +- .../distributeddb/storage/src/package_file.h | 2 + .../relational_row_data_impl.cpp | 0 .../relational_store_connection.cpp | 0 .../relational_store_instance.cpp | 0 .../relational_sync_able_storage.cpp | 119 +- .../relational_sync_data_inserter.cpp | 0 .../relational_sync_data_inserter.h | 0 .../relationaldb_properties.cpp | 0 .../storage/src/single_ver_natural_store.h | 2 +- .../src/sqlite/{ => kv}/sqlite_local_kvdb.cpp | 0 .../src/sqlite/{ => kv}/sqlite_local_kvdb.h | 0 .../{ => kv}/sqlite_local_kvdb_connection.cpp | 0 .../{ => kv}/sqlite_local_kvdb_connection.h | 0 .../{ => kv}/sqlite_local_kvdb_snapshot.cpp | 0 .../{ => kv}/sqlite_local_kvdb_snapshot.h | 0 .../cloud_sync_log_table_manager.cpp | 0 .../cloud_sync_log_table_manager.h | 0 .../collaboration_log_table_manager.cpp | 0 .../collaboration_log_table_manager.h | 0 .../log_table_manager_factory.cpp | 0 .../log_table_manager_factory.h | 0 .../simple_tracker_log_table_manager.cpp | 0 .../simple_tracker_log_table_manager.h | 0 .../split_device_log_table_manager.cpp | 0 .../split_device_log_table_manager.h | 0 .../sqlite_relational_database_upgrader.cpp | 130 +- .../sqlite_relational_database_upgrader.h | 3 + .../relational/sqlite_relational_store.cpp | 107 +- .../relational/sqlite_relational_store.h | 4 + .../relational/sqlite_relational_utils.cpp | 13 + .../relational/sqlite_relational_utils.h | 8 +- ...qlite_single_relational_storage_engine.cpp | 67 +- .../sqlite_single_relational_storage_engine.h | 8 +- ...e_single_ver_relational_continue_token.cpp | 0 ...ite_single_ver_relational_continue_token.h | 0 ...single_ver_relational_storage_executor.cpp | 1071 +--------- ...e_single_ver_relational_storage_executor.h | 32 +- ...ver_relational_storage_executor_extend.cpp | 1043 ++++++++++ ...ver_relational_storage_extend_executor.cpp | 342 +++- .../sqlite_single_ver_natural_store.cpp | 552 +---- .../sqlite/sqlite_single_ver_natural_store.h | 12 +- ...te_single_ver_natural_store_connection.cpp | 1 - ...sqlite_single_ver_natural_store_extend.cpp | 528 +++++ .../sqlite_single_ver_storage_engine.cpp | 27 +- .../sqlite/sqlite_single_ver_storage_engine.h | 1 - .../storage/src/sqlite/sqlite_utils.cpp | 14 +- .../storage/src/sqlite/sqlite_utils.h | 5 +- .../storage/src/storage_engine.h | 4 +- .../storage/src/storage_engine_manager.cpp | 10 +- .../storage/src/sync_able_engine.cpp | 7 +- .../upgrader/single_ver_database_upgrader.cpp | 4 +- .../syncer/src/cloud/cloud_db_proxy.cpp | 47 + .../syncer/src/cloud/cloud_db_proxy.h | 11 + .../src/cloud/cloud_sync_tag_assets.cpp | 86 +- .../syncer/src/cloud/cloud_sync_utils.cpp | 75 +- .../syncer/src/cloud/cloud_sync_utils.h | 8 +- .../syncer/src/cloud/cloud_syncer.cpp | 352 ++-- .../syncer/src/cloud/cloud_syncer.h | 36 +- .../syncer/src/cloud/cloud_syncer_extend.cpp | 119 +- .../syncer/src/cloud/process_notifier.cpp | 11 + .../syncer/src/cloud/process_notifier.h | 2 + .../syncer/src/{ => device}/ability_sync.cpp | 58 +- .../syncer/src/{ => device}/ability_sync.h | 17 +- .../src/{ => device}/commit_history_sync.cpp | 0 .../src/{ => device}/commit_history_sync.h | 0 .../src/{ => device}/communicator_proxy.cpp | 0 .../src/{ => device}/communicator_proxy.h | 0 .../syncer/src/{ => device}/db_ability.cpp | 0 .../syncer/src/{ => device}/db_ability.h | 0 .../src/{ => device}/device_manager.cpp | 0 .../syncer/src/{ => device}/device_manager.h | 0 .../src/{ => device}/generic_syncer.cpp | 0 .../syncer/src/{ => device}/generic_syncer.h | 0 .../syncer/src/{ => device}/isync_engine.h | 0 .../syncer/src/{ => device}/isync_packet.h | 0 .../src/{ => device}/isync_state_machine.h | 0 .../syncer/src/{ => device}/isync_target.h | 0 .../src/{ => device}/isync_task_context.h | 0 .../syncer/src/{ => device}/meta_data.cpp | 0 .../syncer/src/{ => device}/meta_data.h | 0 .../multiver}/multi_ver_data_sync.cpp | 0 .../multiver}/multi_ver_data_sync.h | 0 .../multiver}/multi_ver_sync_engine.cpp | 0 .../multiver}/multi_ver_sync_engine.h | 0 .../multi_ver_sync_state_machine.cpp | 0 .../multiver}/multi_ver_sync_state_machine.h | 0 .../multiver}/multi_ver_sync_target.h | 0 .../multiver}/multi_ver_sync_task_context.cpp | 0 .../multiver}/multi_ver_sync_task_context.h | 0 .../multiver}/multi_ver_syncer.cpp | 0 .../{ => device/multiver}/multi_ver_syncer.h | 0 .../multiver}/value_slice_sync.cpp | 0 .../{ => device/multiver}/value_slice_sync.h | 0 .../query_sync_water_mark_helper.cpp | 0 .../query_sync_water_mark_helper.h | 0 .../src/{ => device}/remote_executor.cpp | 0 .../syncer/src/{ => device}/remote_executor.h | 0 .../{ => device}/remote_executor_packet.cpp | 0 .../src/{ => device}/remote_executor_packet.h | 0 .../single_ver_data_message_schedule.cpp | 0 .../single_ver_data_message_schedule.h | 0 .../singlever}/single_ver_data_packet.cpp | 0 .../singlever}/single_ver_data_packet.h | 0 .../singlever}/single_ver_data_sync.cpp | 0 .../singlever}/single_ver_data_sync.h | 0 .../singlever}/single_ver_data_sync_utils.cpp | 6 + .../singlever}/single_ver_data_sync_utils.h | 0 .../single_ver_kv_sync_task_context.cpp | 0 .../single_ver_kv_sync_task_context.h | 0 .../singlever}/single_ver_kv_syncer.cpp | 0 .../singlever}/single_ver_kv_syncer.h | 0 ...ingle_ver_relational_sync_task_context.cpp | 0 .../single_ver_relational_sync_task_context.h | 0 .../single_ver_relational_syncer.cpp | 0 .../singlever}/single_ver_relational_syncer.h | 0 .../single_ver_serialize_manager.cpp | 0 .../singlever}/single_ver_serialize_manager.h | 0 .../singlever}/single_ver_sync_engine.cpp | 0 .../singlever}/single_ver_sync_engine.h | 0 .../single_ver_sync_state_machine.cpp | 15 +- .../single_ver_sync_state_machine.h | 4 +- .../singlever}/single_ver_sync_target.cpp | 0 .../singlever}/single_ver_sync_target.h | 0 .../single_ver_sync_task_context.cpp | 0 .../singlever}/single_ver_sync_task_context.h | 0 .../singlever}/single_ver_syncer.cpp | 0 .../singlever}/single_ver_syncer.h | 0 .../src/{ => device}/subscribe_manager.cpp | 0 .../src/{ => device}/subscribe_manager.h | 0 .../syncer/src/{ => device}/sync_engine.cpp | 6 +- .../syncer/src/{ => device}/sync_engine.h | 0 .../src/{ => device}/sync_state_machine.cpp | 0 .../src/{ => device}/sync_state_machine.h | 0 .../syncer/src/{ => device}/sync_target.cpp | 0 .../syncer/src/{ => device}/sync_target.h | 0 .../src/{ => device}/sync_task_context.cpp | 0 .../src/{ => device}/sync_task_context.h | 0 .../src/{ => device}/syncer_factory.cpp | 0 .../syncer/src/{ => device}/syncer_factory.h | 0 .../syncer/src/{ => device}/syncer_proxy.cpp | 0 .../syncer/src/{ => device}/time_sync.cpp | 41 +- .../syncer/src/{ => device}/time_sync.h | 8 +- .../libs/distributeddb/test/BUILD.gn | 8 +- .../test/fuzztest/cloudsync_fuzzer/BUILD.gn | 6 + .../cloudsync_fuzzer/cloudsync_fuzzer.cpp | 2 +- .../test/fuzztest/delegate_fuzzer/BUILD.gn | 7 + .../test/fuzztest/fileoper_fuzzer/BUILD.gn | 7 + .../test/fuzztest/importfile_fuzzer/BUILD.gn | 7 + .../iprocesscommunicator_fuzzer/BUILD.gn | 7 + .../kvdelegatemanager_fuzzer/BUILD.gn | 7 + .../fuzztest/kvstoreresultset_fuzzer/BUILD.gn | 7 + .../kvstoreresultset_fuzzer.h | 6 - .../test/fuzztest/nbdelegate_fuzzer/BUILD.gn | 7 + .../test/fuzztest/parseckeck_fuzzer/BUILD.gn | 7 + .../test/fuzztest/query_fuzzer/BUILD.gn | 7 + .../test/fuzztest/rekey_fuzzer/BUILD.gn | 7 + .../relationalstoredelegate_fuzzer/BUILD.gn | 7 + .../relationalstoremanager_fuzzer/BUILD.gn | 7 + .../fuzztest/schemadelegate_fuzzer/BUILD.gn | 7 + .../test/fuzztest/storage_fuzzer/BUILD.gn | 6 + .../storage_fuzzer/storage_fuzzer.cpp | 22 +- .../test/fuzztest/sync_fuzzer/BUILD.gn | 7 + .../test/fuzztest/sync_fuzzer/sync_fuzzer.cpp | 8 +- .../distributeddb/test/moduletest/BUILD.gn | 11 + ...ibuteddb_relational_schema_object_test.cpp | 117 +- .../common/distributeddb_tools_unit_test.cpp | 143 +- .../common/distributeddb_tools_unit_test.h | 8 + .../common/common/evloop_timer_unit_test.cpp | 21 +- .../unittest/common/common/native_sqlite.cpp | 10 +- .../common/communicator/adapter_stub.cpp | 2 +- .../distributeddb_communicator_deep_test.cpp | 3 + ...uteddb_cloud_interfaces_reference_test.cpp | 39 + ...b_cloud_interfaces_relational_ext_test.cpp | 104 +- ...ces_relational_remove_device_data_test.cpp | 62 +- ...cloud_interfaces_set_cloud_schema_test.cpp | 310 ++- ...stributeddb_interfaces_data_value_test.cpp | 3 +- ...ddb_interfaces_database_rd_kernel_test.cpp | 121 +- ...tributeddb_interfaces_nb_delegate_test.cpp | 10 +- ..._interfaces_nb_delegate_test_rd_kernal.cpp | 440 ++-- ...terfaces_relational_tracker_table_test.cpp | 69 + ...teddb_cloud_assets_operation_sync_test.cpp | 235 ++- .../distributeddb_cloud_check_sync_test.cpp | 143 +- ..._cloud_interfaces_relational_sync_test.cpp | 30 +- ...istributeddb_cloud_reference_sync_test.cpp | 29 +- ...stributeddb_cloud_save_cloud_data_test.cpp | 9 +- ...relational_cloud_syncable_storage_test.cpp | 36 + ...ge_rd_single_ver_natural_executor_test.cpp | 30 - .../mock_sqlite_single_ver_natural_store.h | 2 +- .../syncer/cloud/cloud_db_sync_utils_test.cpp | 4 +- .../common/syncer/cloud/cloud_syncer_test.h | 10 +- .../distributeddb_cloud_db_proxy_test.cpp | 33 +- ...eddb_cloud_syncer_download_assets_test.cpp | 187 +- .../common/syncer/cloud/mock_iclouddb.h | 1 + .../common/syncer/cloud/virtual_cloud_db.cpp | 37 +- .../common/syncer/cloud/virtual_cloud_db.h | 7 + .../syncer/cloud/virtual_cloud_syncer.cpp | 34 +- .../syncer/cloud/virtual_cloud_syncer.h | 12 +- .../distributeddb_ability_sync_test.cpp | 4 +- .../distributeddb_mock_sync_module_test.cpp | 2 +- ...ributeddb_relational_ver_p2p_sync_test.cpp | 2 +- ...ddb_single_ver_p2p_subscribe_sync_test.cpp | 4 +- ...buteddb_single_ver_p2p_sync_check_test.cpp | 4 +- .../syncer/distributeddb_time_sync_test.cpp | 22 +- .../virtual_single_ver_sync_db_Interface.cpp | 2 +- .../src/kv_store_impl_hal/dbm_kv_store.c | 16 +- .../innerkits/distributeddata/BUILD.gn | 13 + .../distributeddata/cfi_blocklist.txt | 21 + .../innerkits/distributeddata/include/blob.h | 4 +- .../distributeddata/include/data_query.h | 2 +- .../distributeddata/include/kv_utils.h | 6 +- .../distributeddata/include/priority_queue.h | 1 + .../innerkits/distributeddata/include/types.h | 5 +- .../innerkits/distributeddatamgr/BUILD.gn | 6 + .../include/distributed_data_mgr.h | 2 +- .../jskits/distributeddata/BUILD.gn | 6 + .../jskits/distributedkvstore/BUILD.gn | 6 + kv_store/kvstoremock/distributeddb/BUILD.gn | 8 + .../distributeddata/src/js_util.cpp | 1 - .../innerkits/distributeddata/BUILD.gn | 2 - .../interfaces/mock/base/parcel.cpp | 1298 ------------ .../kvstoremock/interfaces/mock/base/parcel.h | 396 ---- .../interfaces/mock/base/refbase.cpp | 435 ---- .../interfaces/mock/base/refbase.h | 689 ------- .../devicekvstore_fuzzer.cpp | 4 +- .../singlekvstore_fuzzer.cpp | 4 +- .../typesutil_fuzzer/typesutil_fuzzer.cpp | 8 +- mock/CMakeLists.txt | 2 + .../ability_base/want/include/element_name.h | 6 +- .../appexecfwk_base/include/ability_info.h | 19 +- .../appexecfwk_base/include/hap_module_info.h | 15 +- .../appexecfwk_base/include/module_info.h | 15 +- .../include/bus_center/softbus_bus_center.h | 1332 ++++++------ .../include/common/softbus_common.h | 69 +- .../include/common/softbus_error_code.h | 262 ++- .../include/discovery/discovery_service.h | 43 +- .../include/transport/dfs_session.h | 111 + .../include/transport/inner_session.h | 85 + .../include/transport/inner_socket.h | 60 + .../include/transport/session.h | 1333 ++++++------ .../softbus_client/include/transport/socket.h | 316 +++ .../include/transport/trans_type.h | 202 ++ .../interfaces/common/include/common_func.h | 1 - .../common/include/sandbox_helper.h | 5 + .../native/file_uri/include/file_uri.h | 4 +- .../native/file_uri/src/file_uri.cpp | 46 +- mock/src/mock_bundle_manager.cpp | 39 + mock/src/mock_filemanagement.cpp | 16 + mock/src/mock_soft_bus.cpp | 52 +- preferences/bundle.json | 4 +- .../js/napi/common/include/js_observer.h | 3 +- .../js/napi/common/include/js_utils.h | 5 + .../js/napi/common/include/napi_async_call.h | 5 +- .../common/include/napi_preferences_error.h | 6 + .../include/napi_preferences_observer.h | 6 +- .../js/napi/common/src/js_observer.cpp | 14 +- .../js/napi/common/src/js_utils.cpp | 2 - .../js/napi/common/src/napi_async_call.cpp | 18 +- .../common/src/napi_preferences_observer.cpp | 1 - .../js/napi/common/src/uv_queue.cpp | 2 +- .../napi/preferences/src/napi_preferences.cpp | 51 +- .../src/napi_preferences_helper.cpp | 28 +- .../js/napi/storage/src/napi_storage.cpp | 30 +- .../napi/storage/src/napi_storage_helper.cpp | 19 +- .../src/napi_system_storage.cpp | 1 - .../mock/ability_base/zuri/include/uri.h | 4 +- .../mock/c_utils/utils/base/include/refbase.h | 3 + .../platform/include/preferences_file_lock.h | 12 + .../platform/src/preferences_file_lock.cpp | 19 +- .../frameworks/native/src/base64_helper.cpp | 15 +- .../native/src/preferences_helper.cpp | 15 +- .../native/src/preferences_impl.cpp | 2 +- .../native/src/preferences_xml_utils.cpp | 12 +- preferences/test/js/BUILD.gn | 7 + .../preferences/src/AppScope/app.json | 21 + .../resources/base/element/string.json | 8 + .../stage_unittest/preferences/src/BUILD.gn | 50 + .../stage_unittest/preferences/src/Test.json | 27 + .../src/main/ets/Application/AbilityStage.ts | 23 + .../src/main/ets/MainAbility/MainAbility.ts | 50 + .../ets/MainAbility/pages/index/index.ets | 55 + .../ets/MainAbility/pages/second/second.ets | 43 + .../src/main/ets/TestAbility/TestAbility.ts | 43 + .../src/main/ets/TestAbility/pages/index.ets | 48 + .../ets/TestRunner/OpenHarmonyTestRunner.ts | 72 + .../src/entry/src/main/ets/test/List.test.ets | 24 + .../ets/test/StagePreferencesCallBacktest.ets | 295 +++ .../ets/test/StagePreferencesPromisetest.ets | 245 +++ .../ets/test/StagePreferencesSynctest.ets | 187 ++ .../src/entry/src/main/ets/test/Utils.ets | 34 +- .../src/entry/src/main/module.json | 52 + .../main/resources/base/element/string.json | 44 + .../src/main/resources/base/media/icon.png | Bin 0 -> 15458 bytes .../resources/base/profile/form_config.json | 6 + .../resources/base/profile/form_config1.txt | 1 + .../main/resources/base/profile/invalid.txt | 5 + .../resources/base/profile/main_pages.json | 6 + .../base/profile/shortcuts_config.json | 6 + .../src/signature/openharmony_sx.p7b | Bin 0 -> 3500 bytes relational_store/CMakeLists.txt | 17 +- relational_store/bundle.json | 16 +- .../js/napi/cloud_data/src/js_cloud_share.cpp | 9 +- .../js/napi/cloud_extension/BUILD.gn | 4 +- .../napi/cloud_extension/cloud_extension.cpp | 2 +- .../cloud_extension/cloud_extension_stub.js | 889 ++++++++ .../cloud_sharing_types_util.js | 246 --- .../js/napi/common/include/js_scope.h | 31 + .../js/napi/common/include/js_uv_queue.h | 69 +- .../napi/common/src/js_common_type_init.cpp | 2 +- .../js/napi/common/src/js_scope.cpp | 29 + .../js/napi/common/src/js_uv_queue.cpp | 280 ++- .../dataability/include/napi_async_proxy.h | 1 + .../js/napi/relationalstore/BUILD.gn | 1 + .../include/napi_rdb_predicates.h | 2 +- .../relationalstore/src/napi_async_call.cpp | 14 +- .../src/napi_rdb_predicates.cpp | 110 +- .../relationalstore/src/napi_rdb_store.cpp | 4 +- .../relationalstore/src/napi_result_set.cpp | 2 +- .../native/rdb/include/delay_notify.h | 50 + .../native/rdb/include/rdb_security_manager.h | 59 +- .../native/rdb/include/rdb_store_impl.h | 17 +- .../native/rdb/include/share_block.h | 2 - .../native/rdb/include/sqlite_connection.h | 22 +- .../rdb/include/sqlite_connection_pool.h | 44 +- .../native/rdb/include/sqlite_global_config.h | 49 +- .../rdb/include/sqlite_shared_result_set.h | 16 +- .../native/rdb/include/sqlite_statement.h | 3 +- .../native/rdb/include/step_result_set.h | 21 +- .../native/rdb/mock/include/rdb_store_impl.h | 14 +- .../rdb/mock/include/sqlite_connection.h | 20 +- .../rdb/mock/include/sqlite_connection_pool.h | 43 +- .../native/rdb/mock/include/step_result_set.h | 20 +- .../native/rdb/src/abs_predicates.cpp | 6 +- .../native/rdb/src/abs_rdb_predicates.cpp | 8 +- .../native/rdb/src/abs_result_set.cpp | 12 +- .../native/rdb/src/abs_shared_result_set.cpp | 3 +- .../native/rdb/src/cache_result_set.cpp | 2 +- .../native/rdb/src/delay_notify.cpp | 120 ++ .../native/rdb/src/rdb_security_manager.cpp | 170 +- .../native/rdb/src/rdb_store_impl.cpp | 339 ++-- .../frameworks/native/rdb/src/share_block.cpp | 2 +- .../native/rdb/src/sqlite_connection.cpp | 223 +- .../native/rdb/src/sqlite_connection_pool.cpp | 157 +- .../rdb/src/sqlite_shared_result_set.cpp | 74 +- .../native/rdb/src/sqlite_statement.cpp | 8 +- .../native/rdb/src/step_result_set.cpp | 114 +- .../src/data_share_profile_info.cpp | 65 +- .../cloud_data/include/cloud_types.h | 1 - .../common_type/include/common_type_util.h | 41 - .../{common_asset_value.h => common_types.h} | 14 +- .../common_type/include/common_value_object.h | 383 ---- .../include/common_values_bucket.h | 176 -- .../common_type/src/common_type_util.cpp | 52 - .../common_type/src/common_value_object.cpp | 183 -- .../common_type/src/common_values_bucket.cpp | 162 -- .../interfaces/inner_api/rdb/BUILD.gn | 3 +- .../inner_api/rdb/include/abs_result_set.h | 12 +- .../rdb/mock/include/abs_result_set.h | 12 +- .../include/data_share_profile_info.h | 9 +- .../clouddata/unittest/src/CloudShareTest.js | 870 ++++++++ .../unittest/src/RdbStoreCloud.test.js | 15 + .../src/RdbStoreResultSetJsunit.test.js | 96 + relational_store/test/native/rdb/BUILD.gn | 1 + .../rdb/unittest/cache_result_set_test.cpp | 766 +++++++ .../rdb/unittest/rdb_encrypt_decrypt_test.cpp | 72 + .../rdb/unittest/rdb_predicates_test.cpp | 8 + .../rdb_sqlite_shared_result_set_test.cpp | 100 + .../rdb/unittest/rdb_step_result_set_test.cpp | 381 +++- .../rdb/unittest/rdb_store_config_test.cpp | 15 + .../rdb/unittest/rdb_store_impl_test.cpp | 104 +- .../rdb/unittest/rdb_store_subscribe_test.cpp | 22 + .../rdb/unittest/rdb_transaction_test.cpp | 36 +- .../rdb/unittest/rdb_wal_limit_test.cpp | 151 +- .../unittest/rdb_bms_adapter_test.cpp | 23 +- relational_store/test/ndk/BUILD.gn | 1 + relational_store/test/ndk/unittest/common.h | 2 +- .../test/ndk/unittest/rdb_asset_test.cpp | 300 +++ .../test/ndk/unittest/rdb_cursor_test.cpp | 112 +- .../test/ndk/unittest/rdb_predicates_test.cpp | 2 +- .../test/ndk/unittest/rdb_store_test.cpp | 140 +- udmf/bundle.json | 3 +- .../common/custom_utd_json_parser.cpp | 9 +- .../framework/common/custom_utd_json_parser.h | 6 +- udmf/framework/common/custom_utd_store.cpp | 7 +- udmf/framework/common/custom_utd_store.h | 4 +- udmf/framework/common/tlv_object.cpp | 554 +++++ udmf/framework/common/tlv_object.h | 512 +---- udmf/framework/common/tlv_util.cpp | 10 +- udmf/framework/common/utd_cfgs_checker.cpp | 19 +- udmf/framework/common/utd_cfgs_checker.h | 2 - udmf/framework/common/utd_common.h | 2 + udmf/framework/common/utd_graph.cpp | 1 + .../data/application_defined_record.cpp | 2 +- .../innerkitsimpl/data/unified_data.cpp | 10 +- .../data/unified_data_helper.cpp | 220 ++ .../service/udmf_service_client.cpp | 41 +- .../test/unittest/udmf_client_test.cpp | 184 +- .../test/unittest/utd_client_test.cpp | 4 +- .../jskitsimpl/unittest/UdmfJsTest.js | 582 ++++++ .../jskitsimpl/unittest/UdmfUtdJsTest.js | 40 +- udmf/interfaces/innerkits/BUILD.gn | 6 + udmf/interfaces/innerkits/client/utd_client.h | 1 - udmf/interfaces/innerkits/common/error_code.h | 1 + udmf/interfaces/innerkits/data/unified_data.h | 2 +- .../innerkits/data/unified_data_helper.h | 88 +- .../innerkits/data/unified_record.h | 2 - 758 files changed, 35016 insertions(+), 12105 deletions(-) create mode 100644 data_share/frameworks/js/napi/dataShare/libdatashare_jscommon.map delete mode 100644 data_share/frameworks/native/common/include/datashare_abs_result_set.h create mode 100644 data_share/test/js/data_share/BUILD.gn create mode 100644 data_share/test/js/data_share/unittest/config.json create mode 100644 data_share/test/js/data_share/unittest/openharmony_sx.p7b create mode 100644 data_share/test/js/data_share/unittest/src/BUILD.gn create mode 100644 data_share/test/js/data_share/unittest/src/DataShareSilentAccessJsunit.test.js create mode 100644 data_share/test/native/unittest/mediadatashare_test/src/slientswitch_test.cpp rename {relational_store/interfaces/inner_api/common_type => datamgr_service/services/distributeddataservice/rust/connect_adapter}/BUILD.gn (58%) create mode 100644 datamgr_service/services/distributeddataservice/rust/connect_adapter/include/connect.h rename relational_store/interfaces/inner_api/common_type/include/visibility.h => datamgr_service/services/distributeddataservice/rust/connect_adapter/include/connect_wrapper.h (70%) create mode 100644 datamgr_service/services/distributeddataservice/rust/connect_adapter/src/connect.cpp rename kv_store/kvstoremock/interfaces/mock/base/nocopyable.h => datamgr_service/services/distributeddataservice/rust/connect_adapter/src/connect_wrapper.cpp (48%) create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/BUILD.gn create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/asset_loader_impl.cpp create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/asset_loader_impl.h create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/cloud_cursor_impl.cpp create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/cloud_cursor_impl.h create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/cloud_db_impl.cpp create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/cloud_db_impl.h create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/cloud_server_impl.cpp create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/cloud_server_impl.h create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/extension_util.cpp create mode 100644 datamgr_service/services/distributeddataservice/rust/extension/extension_util.h create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/BUILD.gn create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/Cargo.toml create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/README.md create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/README_zh.md create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/include/basic_rust_types.h create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/include/cloud_ext_types.h create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/include/cloud_extension.h create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/include/error.h create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/c_adapter/basic_rust_types.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/c_adapter/cloud_ext_types.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/c_adapter/cloud_extension.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/c_adapter/mod.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/ipc_conn/asset.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/ipc_conn/connect.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/ipc_conn/database.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/ipc_conn/error.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/ipc_conn/ffi.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/ipc_conn/function.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/ipc_conn/mod.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/lib.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/service_impl/asset_loader.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/service_impl/cloud_db.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/service_impl/cloud_service.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/service_impl/error.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/service_impl/mod.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/src/service_impl/types.rs create mode 100644 datamgr_service/services/distributeddataservice/rust/ylong_cloud_extension/tests/demo.txt create mode 100644 datamgr_service/services/distributeddataservice/service/data_share/data_share_profile_config.cpp create mode 100644 datamgr_service/services/distributeddataservice/service/data_share/data_share_profile_config.h create mode 100644 datamgr_service/services/distributeddataservice/service/data_share/data_share_silent_config.cpp rename relational_store/frameworks/js/napi/common/include/js_proxy.h => datamgr_service/services/distributeddataservice/service/data_share/data_share_silent_config.h (41%) create mode 100644 datamgr_service/services/distributeddataservice/service/test/meta_data_test.cpp create mode 100644 kv_store/frameworks/common/test/priority_queue_test.cpp create mode 100644 kv_store/frameworks/libs/distributeddb/cfi_blocklist.txt rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/generic_kvdb.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/generic_kvdb.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/generic_kvdb_connection.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/generic_kvdb_connection.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/generic_single_ver_kv_entry.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/generic_single_ver_kv_entry.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_commit_notify_filterable_data.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_commit_notify_filterable_data.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_manager.cpp (99%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_observer_handle.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_observer_handle.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_properties.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_utils.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_utils.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_windowed_result_set.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/kvdb_windowed_result_set.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/local_kvdb.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/sync_able_kvdb.cpp (95%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/sync_able_kvdb.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/sync_able_kvdb_connection.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => kv}/sync_able_kvdb_connection.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => relational}/relational_row_data_impl.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => relational}/relational_store_connection.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => relational}/relational_store_instance.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => relational}/relational_sync_able_storage.cpp (94%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => relational}/relational_sync_data_inserter.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => relational}/relational_sync_data_inserter.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/{ => relational}/relationaldb_properties.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => kv}/sqlite_local_kvdb.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => kv}/sqlite_local_kvdb.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => kv}/sqlite_local_kvdb_connection.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => kv}/sqlite_local_kvdb_connection.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => kv}/sqlite_local_kvdb_snapshot.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => kv}/sqlite_local_kvdb_snapshot.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/cloud_sync_log_table_manager.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/cloud_sync_log_table_manager.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/collaboration_log_table_manager.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/collaboration_log_table_manager.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/log_table_manager_factory.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/log_table_manager_factory.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/simple_tracker_log_table_manager.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/simple_tracker_log_table_manager.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/split_device_log_table_manager.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/split_device_log_table_manager.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/sqlite_single_ver_relational_continue_token.cpp (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/sqlite_single_ver_relational_continue_token.h (100%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/sqlite_single_ver_relational_storage_executor.cpp (62%) rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/sqlite_single_ver_relational_storage_executor.h (93%) create mode 100644 kv_store/frameworks/libs/distributeddb/storage/src/sqlite/relational/sqlite_single_ver_relational_storage_executor_extend.cpp rename kv_store/frameworks/libs/distributeddb/storage/src/sqlite/{ => relational}/sqlite_single_ver_relational_storage_extend_executor.cpp (85%) create mode 100644 kv_store/frameworks/libs/distributeddb/storage/src/sqlite/sqlite_single_ver_natural_store_extend.cpp rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/ability_sync.cpp (94%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/ability_sync.h (90%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/commit_history_sync.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/commit_history_sync.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/communicator_proxy.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/communicator_proxy.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/db_ability.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/db_ability.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/device_manager.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/device_manager.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/generic_syncer.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/generic_syncer.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/isync_engine.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/isync_packet.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/isync_state_machine.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/isync_target.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/isync_task_context.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/meta_data.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/meta_data.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_data_sync.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_data_sync.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_sync_engine.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_sync_engine.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_sync_state_machine.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_sync_state_machine.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_sync_target.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_sync_task_context.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_sync_task_context.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_syncer.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/multi_ver_syncer.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/value_slice_sync.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/multiver}/value_slice_sync.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/query_sync_water_mark_helper.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/query_sync_water_mark_helper.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/remote_executor.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/remote_executor.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/remote_executor_packet.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/remote_executor_packet.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_message_schedule.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_message_schedule.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_packet.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_packet.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_sync.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_sync.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_sync_utils.cpp (98%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_data_sync_utils.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_kv_sync_task_context.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_kv_sync_task_context.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_kv_syncer.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_kv_syncer.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_relational_sync_task_context.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_relational_sync_task_context.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_relational_syncer.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_relational_syncer.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_serialize_manager.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_serialize_manager.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_engine.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_engine.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_state_machine.cpp (98%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_state_machine.h (98%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_target.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_target.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_task_context.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_sync_task_context.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_syncer.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device/singlever}/single_ver_syncer.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/subscribe_manager.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/subscribe_manager.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_engine.cpp (99%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_engine.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_state_machine.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_state_machine.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_target.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_target.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_task_context.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/sync_task_context.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/syncer_factory.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/syncer_factory.h (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/syncer_proxy.cpp (100%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/time_sync.cpp (92%) rename kv_store/frameworks/libs/distributeddb/syncer/src/{ => device}/time_sync.h (92%) create mode 100644 kv_store/interfaces/innerkits/distributeddata/cfi_blocklist.txt delete mode 100644 kv_store/kvstoremock/interfaces/mock/base/parcel.cpp delete mode 100644 kv_store/kvstoremock/interfaces/mock/base/parcel.h delete mode 100644 kv_store/kvstoremock/interfaces/mock/base/refbase.cpp delete mode 100644 kv_store/kvstoremock/interfaces/mock/base/refbase.h create mode 100644 mock/innerkits/dsoftbus/softbus_client/include/transport/dfs_session.h create mode 100644 mock/innerkits/dsoftbus/softbus_client/include/transport/inner_session.h create mode 100644 mock/innerkits/dsoftbus/softbus_client/include/transport/inner_socket.h create mode 100644 mock/innerkits/dsoftbus/softbus_client/include/transport/socket.h create mode 100644 mock/innerkits/dsoftbus/softbus_client/include/transport/trans_type.h create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/AppScope/app.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/AppScope/resources/base/element/string.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/BUILD.gn create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/Test.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/Application/AbilityStage.ts create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/MainAbility/pages/index/index.ets create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/MainAbility/pages/second/second.ets create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/TestAbility/TestAbility.ts create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/TestAbility/pages/index.ets create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/TestRunner/OpenHarmonyTestRunner.ts create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/test/List.test.ets create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/test/StagePreferencesCallBacktest.ets create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/test/StagePreferencesPromisetest.ets create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/test/StagePreferencesSynctest.ets rename relational_store/interfaces/inner_api/common_type/include/common_errno.h => preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/ets/test/Utils.ets (53%) create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/module.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/resources/base/element/string.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/resources/base/media/icon.png create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/resources/base/profile/form_config.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/resources/base/profile/form_config1.txt create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/resources/base/profile/invalid.txt create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/resources/base/profile/main_pages.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/entry/src/main/resources/base/profile/shortcuts_config.json create mode 100644 preferences/test/js/unittest/stage_unittest/preferences/src/signature/openharmony_sx.p7b create mode 100644 relational_store/frameworks/js/napi/cloud_extension/cloud_extension_stub.js delete mode 100644 relational_store/frameworks/js/napi/cloud_extension/cloud_sharing_types_util.js create mode 100644 relational_store/frameworks/js/napi/common/include/js_scope.h create mode 100644 relational_store/frameworks/js/napi/common/src/js_scope.cpp create mode 100644 relational_store/frameworks/native/rdb/include/delay_notify.h create mode 100644 relational_store/frameworks/native/rdb/src/delay_notify.cpp delete mode 100644 relational_store/interfaces/inner_api/common_type/include/common_type_util.h rename relational_store/interfaces/inner_api/common_type/include/{common_asset_value.h => common_types.h} (76%) delete mode 100644 relational_store/interfaces/inner_api/common_type/include/common_value_object.h delete mode 100644 relational_store/interfaces/inner_api/common_type/include/common_values_bucket.h delete mode 100644 relational_store/interfaces/inner_api/common_type/src/common_type_util.cpp delete mode 100644 relational_store/interfaces/inner_api/common_type/src/common_value_object.cpp delete mode 100644 relational_store/interfaces/inner_api/common_type/src/common_values_bucket.cpp create mode 100644 relational_store/test/js/clouddata/unittest/src/CloudShareTest.js create mode 100644 relational_store/test/native/rdb/unittest/cache_result_set_test.cpp create mode 100644 relational_store/test/ndk/unittest/rdb_asset_test.cpp create mode 100644 udmf/framework/common/tlv_object.cpp create mode 100644 udmf/framework/innerkitsimpl/data/unified_data_helper.cpp rename data_share/frameworks/native/common/include/datashare_shared_result_set.h => udmf/interfaces/innerkits/data/unified_data_helper.h (40%) diff --git a/data_object/CMakeLists.txt b/data_object/CMakeLists.txt index 37328408..a3189475 100644 --- a/data_object/CMakeLists.txt +++ b/data_object/CMakeLists.txt @@ -33,7 +33,8 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../utils_native/safwk/native/inc include(${MOCK_DIR}/include/CMakeLists.txt OPTIONAL) include(${KV_STORE_DIR}/interfaces/CMakeLists.txt OPTIONAL) -set(links secure mock adapter distributeddb kvdb common_type) +set(links secure mock adapter distributeddb kvdb) add_library(data_object SHARED ${data_object_src}) target_link_libraries(data_object ${links}) -target_include_directories(data_object PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/innerkits) \ No newline at end of file +target_include_directories(data_object PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/innerkits) +target_include_directories(data_object PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../relational_store/interfaces/inner_api/common_type/include) \ No newline at end of file diff --git a/data_object/data_object.gni b/data_object/data_object.gni index d3b7d9f4..eff61218 100644 --- a/data_object/data_object.gni +++ b/data_object/data_object.gni @@ -14,3 +14,5 @@ kvstore_path = "//foundation/distributeddatamgr/kv_store/frameworks" data_object_base_path = "//foundation/distributeddatamgr/data_object" + +relational_store_path = "//foundation/distributeddatamgr/relational_store" diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h b/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h index e4ac9374..8d02238a 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h @@ -23,18 +23,20 @@ namespace OHOS::ObjectStore { class AssetChangeTimer { public: - static AssetChangeTimer *GetInstance(FlatObjectStore *flatObjectStore, std::shared_ptr watcher); - void OnAssetChanged(const std::string &sessionId, const std::string &assetKey); + static AssetChangeTimer *GetInstance(FlatObjectStore *flatObjectStore); + void OnAssetChanged( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher); private: AssetChangeTimer() = default; ~AssetChangeTimer() = default; AssetChangeTimer(const AssetChangeTimer &) = delete; AssetChangeTimer &operator=(const AssetChangeTimer &) = delete; - AssetChangeTimer(FlatObjectStore *flatObjectStore, std::shared_ptr watcher); - void StartTimer(const std::string &sessionId, const std::string &assetKey); + AssetChangeTimer(FlatObjectStore *flatObjectStore); + void StartTimer(const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher); void StopTimer(const std::string &sessionId, const std::string &assetKey); - std::function ProcessTask(const std::string &sessionId, const std::string &assetKey); + std::function ProcessTask( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher); uint32_t HandleAssetChanges(const std::string &sessionId, const std::string &assetKey); bool GetAssetValue(const std::string &sessionId, const std::string &assetKey, Asset &assetValue); @@ -42,7 +44,6 @@ private: std::unordered_map assetChangeTasks_; FlatObjectStore *flatObjectStore_ = nullptr; std::shared_ptr executor_; - std::shared_ptr watcher_; static std::mutex instanceMutex; static AssetChangeTimer *instance; diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h b/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h index 04a73387..7ce14d14 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h @@ -68,7 +68,8 @@ public: const std::string &assetKey, std::shared_ptr watcher)>; WatcherProxy(const std::shared_ptr objectWatcher, const std::string &sessionId); - void OnChanged(const std::string &sessionId, const std::vector &changedData) override; + void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) override; void SetAssetChangeCallBack(const AssetChangeCallback &assetChangeCallback); private: bool FindChangedAssetKey(const std::string &changedKey, std::string &assetKey); diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h b/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h index 4ed9b687..3408cbb0 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h @@ -21,7 +21,6 @@ #include "bytes.h" #include "flat_object_storage_engine.h" -#include "condition_lock.h" #include "distributed_object.h" #include "object_types.h" @@ -31,7 +30,8 @@ public: FlatObjectWatcher(const std::string &sessionId) : TableWatcher(sessionId) { } - virtual void OnChanged(const std::string &sessionid, const std::vector &changedData) = 0; + virtual void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) = 0; }; class CacheManager { @@ -51,8 +51,9 @@ private: const std::string &deviceId, const std::map> &objectData, const std::function &)> &callback); int32_t RevokeSaveObject( - const std::string &bundleName, const std::string &sessionId, std::function &callback); + const std::string &bundleName, const std::string &sessionId, const std::function &callback); std::mutex mutex_; + static constexpr uint32_t WAIT_TIME = 5; }; class FlatObjectStore { diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h b/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h index 45128255..ef9a747e 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h @@ -33,7 +33,8 @@ public: TableWatcher(const std::string &sessionId) : Watcher(sessionId) { } - virtual void OnChanged(const std::string &sessionid, const std::vector &changedData) = 0; + virtual void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) = 0; }; class StatusWatcher { diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h b/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h index cd3ad646..61c02a23 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h @@ -26,8 +26,8 @@ class Watcher : public DistributedDB::KvStoreObserver { public: Watcher(const std::string &sessionId); virtual ~Watcher() = default; - virtual void OnChanged(const std::string &sessionid, const std::vector &changedData) = 0; - + virtual void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) = 0; void OnChange(const DistributedDB::KvStoreChangedData &data) override; private: diff --git a/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h b/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h index 7253e51e..2d6fb760 100644 --- a/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h +++ b/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h @@ -21,10 +21,15 @@ namespace OHOS::ITypesUtil { using AssetBindInfo = OHOS::ObjectStore::AssetBindInfo; +using Asset = OHOS::ObjectStore::Asset; template<> -API_EXPORT bool Marshalling(const AssetBindInfo &input, MessageParcel &data); +bool Marshalling(const AssetBindInfo &input, MessageParcel &data); template<> -API_EXPORT bool Unmarshalling(AssetBindInfo &output, MessageParcel &data); +bool Unmarshalling(AssetBindInfo &output, MessageParcel &data); +template<> +bool Marshalling(const Asset &input, MessageParcel &data); +template<> +bool Unmarshalling(Asset &output, MessageParcel &data); } #endif // DISTRIBUTED_RDB_RDB_TYPES_UTIL_H diff --git a/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h b/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h index d4b1940a..bcf0b47f 100644 --- a/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h +++ b/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h @@ -25,7 +25,6 @@ #include "app_device_status_change_listener.h" #include "app_types.h" #include "concurrent_map.h" -#include "condition_lock.h" #include "session.h" #include "softbus_bus_center.h" #include "task_scheduler.h" diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp index b59145ad..80513f39 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp @@ -1,4 +1,4 @@ - /* +/* * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,8 +13,8 @@ * limitations under the License. */ #define LOG_TAG "AssetChangeTimer" - #include "asset_change_timer.h" + #include "client_adaptor.h" #include "logger.h" #include "objectstore_errors.h" @@ -23,43 +23,44 @@ namespace OHOS::ObjectStore { std::mutex AssetChangeTimer::instanceMutex; AssetChangeTimer *AssetChangeTimer::instance = nullptr; -AssetChangeTimer *AssetChangeTimer::GetInstance( - FlatObjectStore *flatObjectStore, std::shared_ptr watcher) +AssetChangeTimer *AssetChangeTimer::GetInstance(FlatObjectStore *flatObjectStore) { if (instance == nullptr) { std::lock_guard lockGuard(instanceMutex); if (instance == nullptr) { - instance = new (std::nothrow) AssetChangeTimer(flatObjectStore, watcher); + instance = new (std::nothrow) AssetChangeTimer(flatObjectStore); } } return instance; } -AssetChangeTimer::AssetChangeTimer(FlatObjectStore *flatObjectStore, std::shared_ptr watcher) +AssetChangeTimer::AssetChangeTimer(FlatObjectStore *flatObjectStore) { flatObjectStore_ = flatObjectStore; - watcher_ = watcher; executor_ = std::make_shared(MAX_THREADS, MIN_THREADS); } -void AssetChangeTimer::OnAssetChanged(const std::string &sessionId, const std::string &assetKey) +void AssetChangeTimer::OnAssetChanged( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher) { - StartTimer(sessionId, assetKey); + StartTimer(sessionId, assetKey, watcher); } -void AssetChangeTimer::StartTimer(const std::string &sessionId, const std::string &assetKey) +void AssetChangeTimer::StartTimer( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher) { std::string key = sessionId + ASSET_SEPARATOR + assetKey; std::lock_guard lockGuard(mutex_); if (assetChangeTasks_.find(key) == assetChangeTasks_.end()) { - assetChangeTasks_[key] = executor_->Schedule( - std::chrono::milliseconds(WAIT_INTERVAL), ProcessTask(sessionId, assetKey)); + assetChangeTasks_[key] = + executor_->Schedule(std::chrono::milliseconds(WAIT_INTERVAL), ProcessTask(sessionId, assetKey, watcher)); } else { assetChangeTasks_[key] = executor_->Reset(assetChangeTasks_[key], std::chrono::milliseconds(WAIT_INTERVAL)); } } -std::function AssetChangeTimer::ProcessTask(const std::string &sessionId, const std::string &assetKey) +std::function AssetChangeTimer::ProcessTask( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher) { return [=]() { LOG_DEBUG("Start working on a task, sessionId: %{public}s, assetKey: %{public}s", sessionId.c_str(), @@ -69,7 +70,7 @@ std::function AssetChangeTimer::ProcessTask(const std::string &sessionId if (status == SUCCESS) { LOG_DEBUG("Asset change task end, start callback, sessionId: %{public}s, assetKey: %{public}s", sessionId.c_str(), assetKey.c_str()); - watcher_->OnChanged(sessionId, {assetKey}); + watcher->OnChanged(sessionId, { assetKey }); } }; } @@ -105,8 +106,8 @@ uint32_t AssetChangeTimer::HandleAssetChanges(const std::string &sessionId, cons } status = proxy->OnAssetChanged(flatObjectStore_->GetBundleName(), sessionId, deviceId, assetValue); if (status != SUCCESS) { - LOG_ERROR("OnAssetChanged failed status: %{public}d, sessionId: %{public}s, assetKey: %{public}s", - status, sessionId.c_str(), assetKey.c_str()); + LOG_ERROR("OnAssetChanged failed status: %{public}d, sessionId: %{public}s, assetKey: %{public}s", status, + sessionId.c_str(), assetKey.c_str()); } return status; } diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp index bee691ed..ef627a71 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp @@ -154,8 +154,8 @@ uint32_t DistributedObjectStoreImpl::Watch(DistributedObject *object, std::share std::shared_ptr watcherProxy = std::make_shared(watcher, object->GetSessionId()); watcherProxy->SetAssetChangeCallBack( [=](const std::string &sessionId, const std::string &assetKey, std::shared_ptr objectWatcher) { - AssetChangeTimer *assetChangeTimer = AssetChangeTimer::GetInstance(flatObjectStore_, objectWatcher); - assetChangeTimer->OnAssetChanged(sessionId, assetKey); + AssetChangeTimer *assetChangeTimer = AssetChangeTimer::GetInstance(flatObjectStore_); + assetChangeTimer->OnAssetChanged(sessionId, assetKey, objectWatcher); }); uint32_t status = flatObjectStore_->Watch(object->GetSessionId(), watcherProxy); if (status != SUCCESS) { @@ -208,27 +208,28 @@ WatcherProxy::WatcherProxy(const std::shared_ptr objectWatcher, c { } -void WatcherProxy::OnChanged(const std::string &sessionId, const std::vector &changedData) +void WatcherProxy::OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) { - std::unordered_set assetKeys; + std::unordered_set transferKeys; std::vector otherKeys; for (const auto &str : changedData) { - if (str.find(ASSET_DOT) == std::string::npos) { + if (!enableTransfer || str.find(ASSET_DOT) == std::string::npos) { if (str != DEVICEID_KEY) { otherKeys.push_back(str); } } else { std::string assetKey; if (FindChangedAssetKey(str, assetKey)) { - assetKeys.insert(assetKey); + transferKeys.insert(assetKey); } } } if (!otherKeys.empty()) { objectWatcher_->OnChanged(sessionId, otherKeys); } - if (assetChangeCallback_ != nullptr && !assetKeys.empty()) { - for (auto &assetKey : assetKeys) { + if (assetChangeCallback_ != nullptr && !transferKeys.empty()) { + for (auto &assetKey : transferKeys) { assetChangeCallback_(sessionId, assetKey, objectWatcher_); } } diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp index b761b509..d862c4e3 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp @@ -433,9 +433,13 @@ void FlatObjectStorageEngine::NotifyChange(const std::string &sessionId, } std::vector data {}; for (const auto &item : changedData) { - data.push_back(item.first); + std::string key = item.first; + if (key.compare(0, FIELDS_PREFIX_LEN, FIELDS_PREFIX) == 0) { + key = key.substr(FIELDS_PREFIX_LEN); + } + data.push_back(key); } - observerMap_[sessionId]->OnChanged(sessionId, data); + observerMap_[sessionId]->OnChanged(sessionId, data, false); } void Watcher::OnChange(const DistributedDB::KvStoreChangedData &data) @@ -458,7 +462,7 @@ void Watcher::OnChange(const DistributedDB::KvStoreChangedData &data) changedData.push_back(tmp.substr(FIELDS_PREFIX_LEN)); } } - this->OnChanged(sessionId_, changedData); + this->OnChanged(sessionId_, changedData, true); } Watcher::Watcher(const std::string &sessionId) : sessionId_(sessionId) diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp index cf78cb81..26f6e5c7 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp @@ -15,6 +15,8 @@ #include "flat_object_store.h" +#include "block_data.h" +#include "bytes_utils.h" #include "client_adaptor.h" #include "distributed_objectstore_impl.h" #include "logger.h" @@ -23,7 +25,6 @@ #include "objectstore_errors.h" #include "softbus_adapter.h" #include "string_utils.h" -#include "bytes_utils.h" namespace OHOS::ObjectStore { FlatObjectStore::FlatObjectStore(const std::string &bundleName) @@ -373,14 +374,14 @@ uint32_t CacheManager::Save(const std::string &bundleName, const std::string &se const std::map> &objectData) { std::unique_lock lck(mutex_); - ConditionLock conditionLock; + auto block = std::make_shared>>(WAIT_TIME, std::tuple{ true, ERR_DB_GET_FAIL }); int32_t status = SaveObject(bundleName, sessionId, deviceId, objectData, - [this, &deviceId, &conditionLock](const std::map &results) { + [&deviceId, block](const std::map &results) { LOG_INFO("CacheManager::task callback"); if (results.count(deviceId) != 0) { - conditionLock.Notify(results.at(deviceId)); + block->SetValue({ false, results.at(deviceId) }); } else { - conditionLock.Notify(ERR_DB_GET_FAIL); + block->SetValue({ false, ERR_DB_GET_FAIL }); } }); if (status != SUCCESS) { @@ -388,28 +389,27 @@ uint32_t CacheManager::Save(const std::string &bundleName, const std::string &se return status; } LOG_INFO("CacheManager::start wait"); - status = conditionLock.Wait(); - LOG_INFO("CacheManager::end wait, %{public}d", status); - return status == SUCCESS ? status : ERR_DB_GET_FAIL; + auto [timeout, res] = block->GetValue(); + LOG_INFO("CacheManager::end wait, timeout: %{public}d, result: %{public}d", timeout, res); + return res; } uint32_t CacheManager::RevokeSave(const std::string &bundleName, const std::string &sessionId) { std::unique_lock lck(mutex_); - ConditionLock conditionLock; - std::function callback = [this, &conditionLock](int32_t result) { + auto block = std::make_shared>>(WAIT_TIME, std::tuple{ true, ERR_DB_GET_FAIL }); + int32_t status = RevokeSaveObject(bundleName, sessionId, [block](int32_t result) { LOG_INFO("CacheManager::task callback"); - conditionLock.Notify(result); - }; - int32_t status = RevokeSaveObject(bundleName, sessionId, callback); + block->SetValue({ false, result }); + }); if (status != SUCCESS) { LOG_ERROR("RevokeSaveObject failed"); return status; } LOG_INFO("CacheManager::start wait"); - status = conditionLock.Wait(); - LOG_INFO("CacheManager::end wait, %{public}d", status); - return status == SUCCESS ? status : ERR_DB_GET_FAIL; + auto [timeout, res] = block->GetValue(); + LOG_INFO("CacheManager::end wait, timeout: %{public}d, result: %{public}d", timeout, res); + return res; } int32_t CacheManager::SaveObject(const std::string &bundleName, const std::string &sessionId, @@ -436,7 +436,7 @@ int32_t CacheManager::SaveObject(const std::string &bundleName, const std::strin } int32_t CacheManager::RevokeSaveObject( - const std::string &bundleName, const std::string &sessionId, std::function &callback) + const std::string &bundleName, const std::string &sessionId, const std::function &callback) { sptr proxy = ClientAdaptor::GetObjectService(); if (proxy == nullptr) { diff --git a/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp b/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp index 2745a200..3139edaa 100644 --- a/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp +++ b/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp @@ -131,10 +131,8 @@ uint32_t ProcessCommunicatorImpl::GetMtuSize() uint32_t ProcessCommunicatorImpl::GetMtuSize(const DeviceInfos &devInfo) { - LOG_INFO("GetMtuSize start"); std::vector devInfos = CommunicationProvider::GetInstance().GetDeviceList(); for (auto const &entry : devInfos) { - LOG_INFO("GetMtuSize deviceType: %{public}s", entry.deviceType.c_str()); bool isWatch = (entry.deviceType == SMART_WATCH_TYPE || entry.deviceType == CHILDREN_WATCH_TYPE); if (entry.deviceId == devInfo.identifier && isWatch) { return MTU_SIZE_WATCH; diff --git a/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp b/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp index 39addbc8..f76fa7e3 100644 --- a/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp +++ b/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp @@ -164,7 +164,7 @@ std::vector SoftBusAdapter::GetDeviceList() const LOG_ERROR("GetAllNodeDeviceInfo error"); return dis; } - LOG_INFO("GetAllNodeDeviceInfo success infoNum=%{public}d", infoNum); + LOG_DEBUG("GetAllNodeDeviceInfo success infoNum=%{public}d", infoNum); for (int i = 0; i < infoNum; i++) { std::string uuid = DevManager::GetInstance()->GetUuidByNodeId(std::string(info[i].networkId)); @@ -731,7 +731,6 @@ void AppDataListenerWrap::OnMessageReceived(int sessionId, const void *data, uns void AppDataListenerWrap::OnBytesReceived(int sessionId, const void *data, unsigned int dataLen) { - LOG_INFO("begin"); if (sessionId == INVALID_SESSION_ID) { return; } diff --git a/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp b/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp index 101e2e77..60bc476c 100644 --- a/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp +++ b/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp @@ -28,4 +28,16 @@ bool Unmarshalling(AssetBindInfo &output, MessageParcel &data) return ITypesUtil::Unmarshal(data, output.storeName, output.tableName, output.primaryKey, output.field, output.assetName); } +template<> +bool Marshalling(const Asset &input, MessageParcel &data) +{ + return ITypesUtil::Marshal(data, input.name, input.uri, input.path, input.createTime, + input.modifyTime, input.size, input.status, input.hash); +} +template<> +bool Unmarshalling(Asset &output, MessageParcel &data) +{ + return ITypesUtil::Unmarshal(data, output.name, output.uri, output.path, output.createTime, + output.modifyTime, output.size, output.status, output.hash); +} } diff --git a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn index 890bb211..8a8cd1bc 100644 --- a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn +++ b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn @@ -22,6 +22,7 @@ config("module_private_config") { "../../../../../frameworks/innerkitsimpl/include/adaptor", "../../../../../frameworks/innerkitsimpl/include/common", "${data_object_base_path}/frameworks/innerkitsimpl/include", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] } @@ -39,10 +40,7 @@ ohos_fuzztest("ObjectStoreFuzzTest") { "//foundation/distributeddatamgr/kv_store/frameworks/libs/distributeddb:distributeddb", ] - external_deps = [ - "hilog:libhilog", - "relational_store:common_type", - ] + external_deps = [ "hilog:libhilog" ] } ############################################################################### diff --git a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp index 8a1a5fec..d75d55a2 100644 --- a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp +++ b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp @@ -31,11 +31,13 @@ constexpr const char *TABLESESSIONID = "654321"; class TableWatcherImpl : public TableWatcher { public: explicit TableWatcherImpl(const std::string &sessionId) : TableWatcher(sessionId) {} - void OnChanged(const std::string &sessionid, const std::vector &changedData) override; + void OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) override; virtual ~TableWatcherImpl(); }; TableWatcherImpl::~TableWatcherImpl() {} -void TableWatcherImpl::OnChanged(const std::string &sessionid, const std::vector &changedData) {} +void TableWatcherImpl::OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) {} uint32_t SetUpTestCase() { diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn b/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn index 53392240..63c34eda 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn +++ b/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn @@ -12,7 +12,7 @@ # limitations under the License. import("//build/test.gni") - +import("//foundation/distributeddatamgr/data_object/data_object.gni") module_output_path = "data_object/impl" data_object_base_path = "//foundation/distributeddatamgr/data_object" @@ -35,6 +35,7 @@ config("module_private_config") { "${kv_store_include_path}/interfaces/include/", "${kv_store_include_path}/interfaces/include/relational", "//foundation/distributeddatamgr/kv_store/frameworks/common", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] } @@ -56,7 +57,6 @@ ohos_unittest("NativeObjectStoreTest") { "access_token:libnativetoken", "access_token:libtoken_setproc", "hilog:libhilog", - "relational_store:common_type", ] deps = [ diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h b/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h index 7f7f2771..70f27c48 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h +++ b/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h @@ -24,7 +24,8 @@ public: MockFlatObjectWatcher(const std::string &sessionId) : FlatObjectWatcher(sessionId) { } - void OnChanged(const std::string &sessionid, const std::vector &changedData) override + void OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) override { } }; diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp b/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp index 25f92cdc..94c9f160 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp +++ b/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp @@ -595,4 +595,17 @@ HWTEST_F(NativeCommunicatorTest, DevManager_GetUuidByNodeId_001, TestSize.Level1 auto ret = DevManager::GetInstance()->GetUuidByNodeId(nodeId); EXPECT_EQ(true, ret.empty()); } + +/** +* @tc.name: DevManager_GetLocalDevice +* @tc.desc: test DevManager GetLocalDevice. +* @tc.type: FUNC + */ +HWTEST_F(NativeCommunicatorTest, DevManager_GetLocalDevice_001, TestSize.Level1) +{ + DevManager *devManager = DevManager::GetInstance(); + EXPECT_TRUE(devManager != nullptr); + DevManager::DetailInfo detailInfo = devManager->GetLocalDevice(); + EXPECT_EQ(detailInfo.networkId, ""); +} } \ No newline at end of file diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp b/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp index 648e1448..bebca521 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp +++ b/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp @@ -47,12 +47,14 @@ constexpr HiLogLabel LABEL = { LOG_CORE, 0, "DistributedTest" }; class TableWatcherImpl : public TableWatcher { public: explicit TableWatcherImpl(const std::string &sessionId) : TableWatcher(sessionId) {} - void OnChanged(const std::string &sessionid, const std::vector &changedData) override; + void OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) override; virtual ~TableWatcherImpl(); }; TableWatcherImpl::~TableWatcherImpl() {} -void TableWatcherImpl::OnChanged(const std::string &sessionid, const std::vector &changedData) {} +void TableWatcherImpl::OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) {} class StatusNotifierImpl : public StatusWatcher { public: @@ -645,6 +647,37 @@ HWTEST_F(NativeObjectStoreTest, DistributedObject_GetComplex_002, TestSize.Level EXPECT_EQ(SUCCESS, ret); } +/** + * @tc.name: DistributedObject_SetAsset_001 + * @tc.desc: test DistributedObjectStore SetAsset. + * @tc.type: FUNC + */ +HWTEST_F(NativeObjectStoreTest, DistributedObject_SetAsset_001, TestSize.Level1) +{ + std::string bundleName = "default"; + std::string sessionId = "123456"; + DistributedObjectStore *objectStore = DistributedObjectStore::GetInstance(bundleName); + EXPECT_NE(nullptr, objectStore); + DistributedObject *object = objectStore->CreateObject(sessionId); + EXPECT_NE(nullptr, object); + + uint32_t ret = object->PutString("attachment.name", "1.txt"); + EXPECT_EQ(SUCCESS, ret); + + std::string value; + ret = object->GetString("attachment.name", value); + EXPECT_EQ(SUCCESS, ret); + EXPECT_EQ(value, "1.txt"); + + std::string deviceId; + ret = object->GetString("__deviceId", deviceId); + EXPECT_EQ(SUCCESS, ret); + EXPECT_FALSE(deviceId.empty()); + + ret = objectStore->DeleteObject(sessionId); + EXPECT_EQ(SUCCESS, ret); +} + /** * @tc.name: DistributedObject_TestSetSessionId_001 * @tc.desc: test DistributedObjectStore TestSetSessionId. diff --git a/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h b/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h index 54ee6a11..147e69fd 100644 --- a/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h +++ b/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h @@ -56,7 +56,8 @@ public: class ChangeEventListener : public EventListener { public: - ChangeEventListener(JSWatcher *watcher, DistributedObjectStore *objectStore, DistributedObject *object); + ChangeEventListener( + std::weak_ptr watcher, DistributedObjectStore *objectStore, DistributedObject *object); bool Add(napi_env env, napi_value handler) override; @@ -67,19 +68,19 @@ private: bool isWatched_ = false; DistributedObjectStore *objectStore_; DistributedObject *object_; - JSWatcher *watcher_; + std::weak_ptr watcher_; }; class StatusEventListener : public EventListener { public: - StatusEventListener(JSWatcher *watcher, const std::string &sessionId); + StatusEventListener(std::weak_ptr watcher, const std::string &sessionId); bool Add(napi_env env, napi_value handler) override; bool Del(napi_env env, napi_value handler) override; void Clear(napi_env env) override; private: - JSWatcher *watcher_; + std::weak_ptr watcher_; std::string sessionId_; }; @@ -98,6 +99,8 @@ public: void Emit(const char *type, const std::string &sessionId, const std::string &networkId, const std::string &status); bool IsEmpty(); + + void SetListener(ChangeEventListener *changeEventListener, StatusEventListener *statusEventListener); private: struct ChangeArgs { ChangeArgs(const napi_ref callback, const std::string &sessionId, const std::vector &changeData); @@ -123,7 +126,7 @@ private: class WatcherImpl : public ObjectWatcher { public: - WatcherImpl(JSWatcher *watcher) : watcher_(watcher) + WatcherImpl(std::weak_ptr watcher) : watcher_(watcher) { } @@ -132,7 +135,7 @@ public: void OnChanged(const std::string &sessionid, const std::vector &changedData) override; private: - JSWatcher *watcher_ = nullptr; + std::weak_ptr watcher_; }; } // namespace OHOS::ObjectStore diff --git a/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h b/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h index 0f6d394f..c4f6219a 100644 --- a/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h +++ b/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h @@ -25,14 +25,14 @@ class NotifierImpl : public StatusNotifier { public: static std::shared_ptr GetInstance(); virtual ~NotifierImpl(); - void AddWatcher(std::string &sessionId, JSWatcher *watcher); + void AddWatcher(std::string &sessionId, std::weak_ptr watcher); void DelWatcher(std::string &sessionId); void OnChanged( const std::string &sessionId, const std::string &networkId, const std::string &onlineStatus) override; private: std::mutex mutex_; - std::map watchers_; + std::map> watchers_; }; } // namespace OHOS::ObjectStore #endif // JS_NOTIFIER_IMPL_H diff --git a/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp b/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp index 790da68e..aa2be5ba 100644 --- a/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp +++ b/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp @@ -42,6 +42,10 @@ bool JSObjectWrapper::AddWatch(napi_env env, const char *type, napi_value handle std::unique_lock cacheLock(watchMutex_); if (watcher_ == nullptr) { watcher_ = std::make_shared(env, objectStore_, object_); + std::weak_ptr watcher = watcher_; + auto changeEventListener = new ChangeEventListener(watcher, objectStore_, object_); + auto statusEventListener = new StatusEventListener(watcher, object_->GetSessionId()); + watcher_->SetListener(changeEventListener, statusEventListener); } return watcher_->On(type, handler); } diff --git a/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp b/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp index e9422aa5..30f437ed 100644 --- a/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp +++ b/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp @@ -27,8 +27,6 @@ namespace OHOS::ObjectStore { JSWatcher::JSWatcher(const napi_env env, DistributedObjectStore *objectStore, DistributedObject *object) : UvQueue(env), env_(env) { - changeEventListener_ = new ChangeEventListener(this, objectStore, object); - statusEventListener_ = new StatusEventListener(this, object->GetSessionId()); } JSWatcher::~JSWatcher() @@ -193,6 +191,12 @@ bool JSWatcher::IsEmpty() return false; } +void JSWatcher::SetListener(ChangeEventListener *changeEventListener, StatusEventListener *statusEventListener) +{ + changeEventListener_ = changeEventListener; + statusEventListener_ = statusEventListener; +} + EventHandler *EventListener::Find(napi_env env, napi_value handler) { EventHandler *result = nullptr; @@ -277,17 +281,17 @@ bool EventListener::Add(napi_env env, napi_value handler) void WatcherImpl::OnChanged(const std::string &sessionid, const std::vector &changedData) { - if (watcher_ == nullptr) { - LOG_ERROR("watcher_ is null"); - return; + std::shared_ptr lockedWatcher = watcher_.lock(); + if (lockedWatcher) { + lockedWatcher->Emit(Constants::CHANGE, sessionid, changedData); + } else { + LOG_ERROR("watcher expired"); } - watcher_->Emit(Constants::CHANGE, sessionid, changedData); } WatcherImpl::~WatcherImpl() { LOG_ERROR("destroy"); - watcher_ = nullptr; } bool ChangeEventListener::Add(napi_env env, napi_value handler) @@ -335,7 +339,7 @@ void ChangeEventListener::Clear(napi_env env) } ChangeEventListener::ChangeEventListener( - JSWatcher *watcher, DistributedObjectStore *objectStore, DistributedObject *object) + std::weak_ptr watcher, DistributedObjectStore *objectStore, DistributedObject *object) : objectStore_(objectStore), object_(object), watcher_(watcher) { } @@ -363,7 +367,7 @@ void StatusEventListener::Clear(napi_env env) EventListener::Clear(env); } -StatusEventListener::StatusEventListener(JSWatcher *watcher, const std::string &sessionId) +StatusEventListener::StatusEventListener(std::weak_ptr watcher, const std::string &sessionId) : watcher_(watcher), sessionId_(sessionId) { } diff --git a/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp b/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp index 65a61fde..d52a6500 100644 --- a/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp +++ b/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp @@ -38,7 +38,7 @@ std::shared_ptr NotifierImpl::GetInstance() return instance; } -void NotifierImpl::AddWatcher(std::string &sessionId, JSWatcher *watcher) +void NotifierImpl::AddWatcher(std::string &sessionId, std::weak_ptr watcher) { std::lock_guard lock(mutex_); watchers_.insert_or_assign(sessionId, watcher); @@ -59,9 +59,14 @@ void NotifierImpl::OnChanged( if (watchers_.count(sessionId) != 0) { LOG_INFO( "start emit %{public}s %{public}s %{public}s", sessionId.c_str(), networkId.c_str(), onlineStatus.c_str()); - watchers_.at(sessionId)->Emit("status", sessionId, networkId, onlineStatus); - LOG_INFO( - "end emit %{public}s %{public}s %{public}s", sessionId.c_str(), networkId.c_str(), onlineStatus.c_str()); + std::shared_ptr lockedWatcher = watchers_.at(sessionId).lock(); + if (lockedWatcher) { + lockedWatcher->Emit("status", sessionId, networkId, onlineStatus); + LOG_INFO("end emit %{public}s %{public}s %{public}s", sessionId.c_str(), networkId.c_str(), + onlineStatus.c_str()); + } else { + LOG_ERROR("watcher expired"); + } } } NotifierImpl::~NotifierImpl() diff --git a/data_object/frameworks/jskitsimpl/src/common/js_util.cpp b/data_object/frameworks/jskitsimpl/src/common/js_util.cpp index ec058419..3e29ffaa 100644 --- a/data_object/frameworks/jskitsimpl/src/common/js_util.cpp +++ b/data_object/frameworks/jskitsimpl/src/common/js_util.cpp @@ -18,7 +18,7 @@ #include #include "logger.h" -#include "common_value_object.h" +#include "common_types.h" namespace OHOS::ObjectStore { constexpr int32_t STR_MAX_LENGTH = 4096; @@ -239,28 +239,30 @@ napi_status JSUtil::GetValue(napi_env env, napi_value in, Assets &assets) napi_status JSUtil::GetValue(napi_env env, napi_value in, ValuesBucket &out) { - napi_value keys = 0; + out.clear(); + napi_value values = nullptr; + uint32_t count = 0; napi_get_all_property_names(env, in, napi_key_own_only, static_cast(napi_key_enumerable | napi_key_skip_symbols), - napi_key_numbers_to_strings, &keys); - uint32_t arrLen = 0; - auto status = napi_get_array_length(env, keys, &arrLen); - LOG_ERROR_RETURN(status == napi_ok, "error! The type of values must be a ValuesBucket.", status); - for (size_t i = 0; i < arrLen; ++i) { - napi_value jsKey = 0; - status = napi_get_element(env, keys, i, &jsKey); - LOG_ERROR_RETURN((status == napi_ok), "no element! The type of values must be a ValuesBucket.", status); - std::string key; - status = GetValue(env, jsKey, key); - LOG_ERROR_RETURN((status == napi_ok), "get key failed", status); - napi_value valueJs = 0; - napi_get_property(env, in, jsKey, &valueJs); - ValueObject valueObject; - status = GetValue(env, valueJs, valueObject.value); + napi_key_numbers_to_strings, &values); + napi_status status = napi_get_array_length(env, values, &count); + LOG_ERROR_RETURN(status == napi_ok && count > 0, "get ValuesBucket failed", napi_invalid_arg); + napi_value key = nullptr; + napi_value val = nullptr; + for (uint32_t index = 0; index < count; index++) { + status = napi_get_element(env, values, index, &key); + LOG_ERROR_RETURN(status == napi_ok && key != nullptr, "no element", napi_invalid_arg); + std::string keyStr; + status = GetValue(env, key, keyStr); + LOG_ERROR_RETURN(status == napi_ok, "get key failed", status); + status = napi_get_property(env, in, key, &val); + LOG_ERROR_RETURN(status == napi_ok && val != nullptr, "no element", napi_invalid_arg); + ValueObject value; + status = GetValue(env, val, value); if (status == napi_ok) { - out.Put(key, valueObject); + out.insert(std::pair(keyStr, value)); } else if (status != napi_generic_failure) { - LOG_ERROR("The value type %{public}s is invalid: ", key.c_str()); + LOG_ERROR("The value type %{public}s is invalid: ", keyStr.c_str()); return status; } } diff --git a/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js b/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js index 02b69e9b..38501267 100644 --- a/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js +++ b/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js @@ -14,6 +14,7 @@ */ import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it} from 'deccjsunit/index'; import distributedObject from '@ohos.data.distributedDataObject'; +import commonType from '@ohos.data.commonType'; import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; import featureAbility from '@ohos.ability.featureAbility'; import bundle from '@ohos.bundle'; @@ -75,11 +76,13 @@ describe('objectStoreTest', function () { console.log(TAG + "*************Unit Test Begin*************"); - /** * @tc.name: V9testsetSessionId001 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testcreate001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testcreate001', 0, function () { console.log(TAG + "************* V9testcreate001 start *************"); @@ -115,7 +118,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId001 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId001', 0, function () { console.log(TAG + "************* V9testsetSessionId001 start *************"); @@ -141,7 +147,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId002 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId002', 0, function () { console.log(TAG + "************* V9testsetSessionId002 start *************"); @@ -164,7 +173,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId003 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId003', 0, function () { console.log(TAG + "************* V9testsetSessionId003 start *************"); @@ -185,7 +197,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId004 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId004 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId004', 0, function () { console.log(TAG + "************* V9testsetSessionId004 start *************"); @@ -218,7 +233,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOn001 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOn001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOn001', 0, function () { console.log(TAG + "************* V9testOn001 start *************"); @@ -261,7 +279,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOn002 * @tc.desc: object join session and on,then object change data twice,object can receive two callbacks when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOn002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOn002', 0, function () { console.log(TAG + "************* V9testOn002 start *************"); @@ -295,7 +316,10 @@ describe('objectStoreTest', function () { /** * @tc.name: testOn003 * @tc.desc object join session and on,then object do not change data,object can not receive callbacks - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: testOn003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOn003', 0, function () { console.log(TAG + "************* V9testOn003 start *************"); @@ -330,7 +354,10 @@ describe('objectStoreTest', function () { /** * @tc.name V9testOff001 * @tc.desc object join session and on&off,object can not receive callback after off - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOff001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOff001', 0, function () { console.log(TAG + "************* V9testOff001 start *************"); @@ -376,7 +403,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOff002 * @tc.desc object join session and off,object can not receive callback - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOff002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOff002', 0, function () { console.log(TAG + "************* V9testOff002 start *************"); @@ -407,7 +437,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOnStatus001 * @tc.desc: object set a listener to watch another object online/offline - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOnStatus001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOnStatus001', 0, function () { console.log(TAG + "************* V9testOnStatus001 start *************"); @@ -433,7 +466,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOnStatus002 * @tc.desc: object set several listener and can unWatch all watcher - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOnStatus002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOnStatus002', 0, function () { console.log(TAG + "************* V9testOnStatus002 start *************"); @@ -457,7 +493,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testSave001 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testSave001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testSave001', 0, async function (done) { console.log(TAG + "************* V9testSave001 start *************"); @@ -496,7 +535,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testSave002 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testSave002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testSave002', 0, async function (done) { console.log(TAG + "************* V9testSave002 start *************"); @@ -533,7 +575,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testSave003 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testSave003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testSave003', 0, async function () { console.log(TAG + "************* V9testSave003 start *************"); @@ -580,7 +625,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testRevokeSave001 * @tc.desc: test RevokeSave - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testRevokeSave001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testRevokeSave001', 0, async function (done) { console.log(TAG + "************* V9testRevokeSave001 start *************"); @@ -624,8 +672,11 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testRevokeSave002 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function * @tc.require: + * @tc.number: V9testRevokeSave002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testRevokeSave002', 0, async function () { console.log(TAG + "************* V9testRevokeSave002 start *************"); @@ -671,7 +722,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testRevokeSave003 * @tc.desc: test RevokeSave - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testRevokeSave003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testRevokeSave003', 0, async function () { console.log(TAG + "************* V9testRevokeSave003 start *************"); @@ -706,5 +760,271 @@ describe('objectStoreTest', function () { console.log(TAG + "************* V9testRevokeSave003 end *************"); }) + /** + * @tc.name: V9testbindAssetCommunType001 + * @tc.desc: Test CommType Enum Value + * @tc.type: Function + * @tc.number: V9testbindAssetCommunType001 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetCommunType001', 0, function (done) { + console.log(TAG + "************* V9testbindAssetCommunType001 start *************"); + expect(commonType.AssetStatus.ASSET_NORMAL == 1).assertTrue(); + expect(commonType.AssetStatus.ASSET_INSERT == 2).assertTrue(); + expect(commonType.AssetStatus.ASSET_UPDATE == 3).assertTrue(); + expect(commonType.AssetStatus.ASSET_DELETE == 4).assertTrue(); + expect(commonType.AssetStatus.ASSET_ABNORMAL == 5).assertTrue(); + expect(commonType.AssetStatus.ASSET_DOWNLOADING == 6).assertTrue(); + done(); + }) + + /** + * @tc.name: V9testsetSessionId001 + * @tc.desc: Test bindAssetStore + * @tc.type: Function + * @tc.number: V9testbindAssetStore001 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetStore001', 0, function (done) { + console.log(TAG + "************* V9testbindAssetStore001 start *************"); + let g_object = distributedObject.create(context, { + title:"bindAssettest-title", + content:"bindAssettest-content", + mark:"no mark", + asset001: + { + status:0, + name:"1.txt", + uri:"file://com.example.myapp/data/dir/1.txt", + path:"/dir/1.txt", + createTime: "2023/11/30 19:48:00", + modifyTime: "2023/11/30 20:10:00", + size:"1", + } + }); + + expect(g_object == undefined).assertEqual(false); + g_object.setSessionId("sessionBA1"); + + let asset1 = { + name: "name1", + uri: "uri1", + createTime: "createTime1", + modifyTime: "modifyTime1", + size: "size1", + path: "path1", + status: commonType.AssetStatus.ASSET_NORMAL, + } + + let asset2 = { + name: "name2", + uri: "uri2", + createTime: "createTime2", + modifyTime: "modifyTime2", + size: "size2", + path: "path2", + status: commonType.AssetStatus.ASSET_UPDATE, + } + + let asset3 = { + name: "name3", + uri: "uri3", + createTime: "createTime3", + modifyTime: "modifyTime3", + size: "size3", + path: "path3", + } + + let result = new Uint8Array(8); + for (let i = 0; i < 8; i++) { + result[i] = 1; + } + + let arr = [asset1, asset2]; + let bindInfo = { + storeName:"store1", + tableName:"table1", + primaryKey:{ + "data1": 123, + "data2": arr, + "data3": asset3, + "data4": 101.5, + "data5": result, + "data6": false, + "data7": null, + "data8": "test1"}, + field:"field1", + assetName:"asset1" + } + + try { + g_object.bindAssetStore("asset001", bindInfo, (err, data)=>{ + expect(err == undefined).assertEqual(true); + done(); + }); + } catch (error) { + console.info(`V9testbindAssetStore001 err is: ${error.code} and msg is: ${error.message}`); + expect(null).assertFail(); + done(); + } + }) + + /** + * @tc.name: V9testsetSessionId002 + * @tc.desc: Test bindAssetStore with invalid args + * @tc.type: Function + * @tc.number: V9testsetSessionId002 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetStore002', 0, function (done) { + console.log(TAG + "************* V9testbindAssetStore002 start *************"); + let g_object = distributedObject.create(context, { + title:"bindAssettest-title", + content:"bindAssettest-content", + mark:"no mark", + asset002: + { + status:0, + name:"1.txt", + uri:"file://com.example.myapp/data/dir/1.txt", + path:"/dir/1.txt", + createTime: "2023/11/30 19:48:00", + modifyTime: "2023/11/30 20:10:00", + size:"1", + } + }); + + expect(g_object == undefined).assertEqual(false); + g_object.setSessionId("sessionBA2"); + + let bindInfo = { + storeName: undefined, + tableName: "table1", + primaryKey: {"data1": 123}, + field: "field1", + assetName: "asset1" + } + + try { + g_object.bindAssetStore("asset002", bindInfo, (err, data)=>{ + expect(null).assertFail(); + done(); + }); + } catch (error) { + console.info(`V9testbindAssetStore002 err is: ${error.code} and msg is: ${error.message}`); + expect(error.code == 401).assertTrue(); + done(); + } + }) + + /** + * @tc.name: V9testbindAssetStore003 + * @tc.desc: Test bindAssetStore with invalid args + * @tc.type: Function + * @tc.number: V9testbindAssetStore003 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetStore003', 0, function (done) { + console.log(TAG + "************* V9testbindAssetStore003 start *************"); + let g_object = distributedObject.create(context, { + title:"bindAssettest-title", + content:"bindAssettest-content", + mark:"no mark", + asset003: + { + status:0, + name:"1.txt", + uri:"file://com.example.myapp/data/dir/1.txt", + path:"/dir/1.txt", + createTime: "2023/11/30 19:48:00", + modifyTime: "2023/11/30 20:10:00", + size:"1", + } + }); + + expect(g_object == undefined).assertEqual(false); + g_object.setSessionId("sessionBA2"); + let bindInfo = { + storeName:"name1", + tableName: null, + primaryKey:{"data1": 123}, + field:"field1", + assetName:"asset1" + } + + try { + g_object.bindAssetStore("asset003", bindInfo, (err, data)=>{ + expect(null).assertFail(); + done(); + }); + } catch (error) { + console.info(`V9testbindAssetStore003 err is: ${error.code} and msg is: ${error.message}`); + expect(error.code == 401).assertTrue(); + done(); + } + }) + + /** + * @tc.name: V9testcreate002 + * @tc.desc: object with asset create distributed data object + * @tc.type: Function + * @tc.number: V9testcreate002 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testcreate002', 0, function () { + console.log(TAG + "************* V9testcreate002 start *************"); + var g_object; + const attachment = { + status: 0, + name: "1.txt", + uri: "file://com.example.myapplication/data/storage/el2/distributedfiles/dir/1.txt", + path: "/dir/1.txt", + createTime: "2023-11-26 10:00:00", + modifyTime: "2023-11-26 10:00:00", + size: "1" + }; + try { + g_object = distributedObject.create(context, { + title: "my note", + content: "It's a nice day today.", + mark: false, + attachment + }); + } catch (error) { + console.info(error.code + error.message); + } + expect(g_object === undefined).assertEqual(false); + + g_object.setSessionId("123456").then((data) => { + console.info(TAG + "V9testcreate002"); + console.info(TAG + data); + }).catch((error) => { + console.info(TAG + error); + }); + + try { + g_object.attachment = {}; + } catch (error) { + expect(error.code === 401).assertEqual(true); + expect(error.message === "cannot set attachment by non Asset type data").assertEqual(true); + } + + g_object.setSessionId("").then((data) => { + console.info(TAG + "V9testcreate002"); + console.info(TAG + data); + }).catch((error) => { + console.info(TAG + error); + }); + + console.log(TAG + "************* V9testcreate002 end *************"); + g_object.setSessionId((error, data) => { + console.info(TAG + error + "," + data); + }); + }) console.log(TAG + "*************Unit Test End*************"); }) \ No newline at end of file diff --git a/data_object/interfaces/innerkits/BUILD.gn b/data_object/interfaces/innerkits/BUILD.gn index a2db94aa..47a90fcc 100644 --- a/data_object/interfaces/innerkits/BUILD.gn +++ b/data_object/interfaces/innerkits/BUILD.gn @@ -24,6 +24,7 @@ config("objectstore_config") { "../../frameworks/innerkitsimpl/include", "../../interfaces/innerkits", "${kvstore_path}/common", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] ldflags = [ "-Wl,--exclude-libs,ALL" ] @@ -71,7 +72,6 @@ object_external_deps_config = [ "kv_store:distributeddata_inner", "kv_store:distributeddb", "samgr:samgr_proxy", - "relational_store:common_type", ] ohos_shared_library("distributeddataobject_impl") { branch_protector_ret = "pac_ret" diff --git a/data_object/interfaces/innerkits/object_types.h b/data_object/interfaces/innerkits/object_types.h index 98e7dcd6..2bccc8a4 100644 --- a/data_object/interfaces/innerkits/object_types.h +++ b/data_object/interfaces/innerkits/object_types.h @@ -17,7 +17,7 @@ #define OHOS_OBJECT_ASSET_VALUE_H #include -#include "common_values_bucket.h" +#include "common_types.h" namespace OHOS { namespace ObjectStore { @@ -31,7 +31,7 @@ struct AssetBindInfo { using Asset = CommonType::AssetValue; using ValuesBucket = CommonType::ValuesBucket; -using ValueObject = CommonType::ValueObject; +using ValueObject = CommonType::Value; using Assets = std::vector; static const std::string STATUS_SUFFIX = ".status"; diff --git a/data_object/interfaces/jskits/BUILD.gn b/data_object/interfaces/jskits/BUILD.gn index 8023e95b..fc716832 100644 --- a/data_object/interfaces/jskits/BUILD.gn +++ b/data_object/interfaces/jskits/BUILD.gn @@ -44,6 +44,7 @@ config("objectstore_config") { "../../frameworks/innerkitsimpl/include/communicator", "../../interfaces/innerkits", "${kvstore_path}/common", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] } @@ -113,7 +114,6 @@ ohos_shared_library("distributeddataobject") { "hilog:libhilog", "kv_store:distributeddb", "napi:ace_napi", - "relational_store:common_type", ] public_configs = [ ":objectstore_public_config" ] diff --git a/data_share/README_zh.md b/data_share/README_zh.md index 9475232e..6bc5b6ea 100644 --- a/data_share/README_zh.md +++ b/data_share/README_zh.md @@ -2,11 +2,11 @@ ## 简介 -**数据共享(Data Share)** 部件提供了向其他应用共享以及管理其数据的方法,支持同个设备上不同应用之间的数据共享。 +**数据共享(Data Share)** 部件提供了向其它应用共享以及管理其数据的方法,支持同个设备上不同应用之间的数据共享。 -在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其他应用等。当然,不是所有的数据都允许其他应用访问,比如帐号、密码等;有些数据也只允许其他应用查询而不允许其删改,比如短信等。所以对于各种数据共享场景,DataShare这样一个安全、便捷的可以跨应用的数据共享机制是十分必需的。 +在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其它应用等。当然,不是所有的数据都允许其它应用访问,比如帐号、密码等;有些数据也只允许其它应用查询而不允许其删改,比如短信等。所以对于各种数据共享场景,DataShare这样一个安全、便捷的可以跨应用的数据共享机制是十分必需的。 -数据提供者无需进行繁琐的封装,可直接使用DataShare框架向其他应用共享数据;对数据访问方来说,因DataShare的访问方式不会因数据提供的方式而不同,只需要学习和使用一套接口即可,大大减少了学习时间和开发难度。 +数据提供者无需进行繁琐的封装,可直接使用DataShare框架向其它应用共享数据;对数据访问方来说,因DataShare的访问方式不会因数据提供的方式而不同,只需要学习和使用一套接口即可,大大减少了学习时间和开发难度。 ### 基本概念 @@ -36,7 +36,7 @@ - DataShareExtAbility模块为数据提供方,实现跨应用数据共享的相关业务。 - DataShareHelper模块为数据访问方,提供各种访问数据的接口,包括增删改查等。 -- 数据访问方与提供方通过IPC进行通信,数据提供方可以通过数据库实现,也可以通过其他数据存储方式实现。 +- 数据访问方与提供方通过IPC进行通信,数据提供方可以通过数据库实现,也可以通过其它数据存储方式实现。 - ResultSet模块通过共享内存实现,用于存储查询数据得到的结果集,并提供了遍历结果集的方法。 ## 目录 diff --git a/data_share/bundle.json b/data_share/bundle.json index be7b8ba7..b28c92c3 100644 --- a/data_share/bundle.json +++ b/data_share/bundle.json @@ -119,7 +119,8 @@ } ], "test": [ - "//foundation/distributeddatamgr/data_share/test/native:unittest" + "//foundation/distributeddatamgr/data_share/test/native:unittest", + "//foundation/distributeddatamgr/data_share/test/js/data_share:unittest" ] } } diff --git a/data_share/datashare.gni b/data_share/datashare.gni index e4c79ef5..f329eb95 100644 --- a/data_share/datashare.gni +++ b/data_share/datashare.gni @@ -43,6 +43,8 @@ foundation_path = "//foundation" kvstore_base_path = "//foundation/distributeddatamgr/kv_store" +kvstore_common_path = "${kvstore_base_path}/frameworks/common" + access_token_path = "//base/security/access_token" base_hiviewdfx_hilog_path = "//base/hiviewdfx/hilog" diff --git a/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h b/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h index 6971c25a..db22b37d 100644 --- a/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h +++ b/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h @@ -18,13 +18,14 @@ #include #include "datashare_abs_predicates.h" +#include "js_proxy.h" #include "napi/native_api.h" #include "napi/native_common.h" #include "napi/native_node_api.h" namespace OHOS { namespace DataShare { -class DataSharePredicatesProxy : private DataShareAbsPredicates::JsProxy { +class DataSharePredicatesProxy : public JSProxy::JSProxy { public: static void Init(napi_env env, napi_value exports); static napi_value NewInstance(napi_env env, std::shared_ptr value); diff --git a/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h b/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h index 20681411..a1bf5fb3 100644 --- a/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h +++ b/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h @@ -18,13 +18,14 @@ #include #include "datashare_result_set.h" +#include "js_proxy.h" #include "napi/native_api.h" #include "napi/native_common.h" #include "napi/native_node_api.h" namespace OHOS { namespace DataShare { -class DataShareResultSetProxy final { +class DataShareResultSetProxy final : public JSProxy::JSProxy { public: DataShareResultSetProxy() = default; ~DataShareResultSetProxy(); @@ -58,8 +59,6 @@ private: static napi_value GetColumnCount(napi_env env, napi_callback_info info); static napi_value GetRowCount(napi_env env, napi_callback_info info); static napi_value IsClosed(napi_env env, napi_callback_info info); - - std::shared_ptr resultSet_; }; } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp b/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp index 194eac2b..2b699f54 100644 --- a/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp +++ b/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp @@ -16,7 +16,7 @@ #include "datashare_js_utils.h" #include "datashare_log.h" -#include "napi_ashmem.h" +#include "napi/native_common.h" #include "securec.h" namespace OHOS { @@ -175,7 +175,7 @@ napi_value DataShareJSUtils::Convert2JSValue(napi_env env, const std::vectorpredicates_ = std::make_shared(); + proxy->SetInstance(std::make_shared()); napi_status ret = napi_wrap(env, thiz, proxy, DataSharePredicatesProxy::Destructor, nullptr, nullptr); if (ret != napi_ok) { delete proxy; @@ -133,7 +132,7 @@ napi_value DataSharePredicatesProxy::NewInstance(napi_env env, std::shared_ptrpredicates_ = std::move(value); + proxy->SetInstance(value); return instance; } @@ -146,7 +145,7 @@ std::shared_ptr DataSharePredicatesProxy::GetNativePredi } DataSharePredicatesProxy *proxy = nullptr; napi_unwrap(env, arg, reinterpret_cast(&proxy)); - return proxy->predicates_; + return proxy->GetInstance(); } void DataSharePredicatesProxy::Destructor(napi_env env, void *nativeObject, void *) @@ -157,7 +156,7 @@ void DataSharePredicatesProxy::Destructor(napi_env env, void *nativeObject, void DataSharePredicatesProxy::~DataSharePredicatesProxy() { - predicates_ = nullptr; + SetInstance(nullptr); } DataSharePredicatesProxy::DataSharePredicatesProxy() @@ -171,7 +170,7 @@ std::shared_ptr DataSharePredicatesProxy::GetNativePredi napi_value thiz; napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr); napi_unwrap(env, thiz, reinterpret_cast(&predicatesProxy)); - return predicatesProxy->predicates_; + return predicatesProxy->GetInstance(); } napi_value DataSharePredicatesProxy::EqualTo(napi_env env, napi_callback_info info) @@ -461,6 +460,7 @@ napi_value DataSharePredicatesProxy::Between(napi_env env, napi_callback_info in size_t argc = 3; napi_value args[3] = { 0 }; napi_get_cb_info(env, info, &argc, args, &thiz, nullptr); + //'argc > 2' represents determine if 'argc' is greater than '2' NAPI_ASSERT(env, argc > 2, "Invalid argvs!"); std::string field = DataShareJSUtils::Convert2String(env, args[0], DataShareJSUtils::DEFAULT_BUF_SIZE); std::string low = DataShareJSUtils::ConvertAny2String(env, args[1]); @@ -480,6 +480,7 @@ napi_value DataSharePredicatesProxy::NotBetween(napi_env env, napi_callback_info size_t argc = 3; napi_value args[3] = { 0 }; napi_get_cb_info(env, info, &argc, args, &thiz, nullptr); + //'argc > 2' represents determine if 'argc' is greater than '2' NAPI_ASSERT(env, argc > 2, "Invalid argvs!"); std::string field = DataShareJSUtils::Convert2String(env, args[0], DataShareJSUtils::DEFAULT_BUF_SIZE); std::string low = DataShareJSUtils::ConvertAny2String(env, args[1]); diff --git a/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp b/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp index a5a94e56..f172543a 100644 --- a/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp +++ b/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp @@ -64,7 +64,7 @@ std::shared_ptr DataShareResultSetProxy::GetNativeObject( LOG_ERROR("proxy is null."); return nullptr; } - return proxy->resultSet_; + return proxy->GetInstance(); } napi_value DataShareResultSetProxy::GetConstructor(napi_env env) @@ -129,25 +129,25 @@ napi_value DataShareResultSetProxy::Initialize(napi_env env, napi_callback_info DataShareResultSetProxy::~DataShareResultSetProxy() { LOG_DEBUG("DataShareResultSetProxy destructor!"); - if (resultSet_ != nullptr && !resultSet_->IsClosed()) { - resultSet_->Close(); + if (GetInstance() != nullptr && !GetInstance()->IsClosed()) { + GetInstance()->Close(); } } DataShareResultSetProxy::DataShareResultSetProxy(std::shared_ptr resultSet) { - if (resultSet_ == resultSet) { + if (GetInstance() == resultSet) { return; } - resultSet_ = std::move(resultSet); + SetInstance(resultSet); } DataShareResultSetProxy &DataShareResultSetProxy::operator=(std::shared_ptr resultSet) { - if (resultSet_ == resultSet) { + if (GetInstance() == resultSet) { return *this; } - resultSet_ = std::move(resultSet); + SetInstance(resultSet); return *this; } @@ -158,7 +158,7 @@ std::shared_ptr DataShareResultSetProxy::GetInnerResultSet(n napi_value self = nullptr; napi_get_cb_info(env, info, nullptr, nullptr, &self, nullptr); napi_unwrap(env, self, reinterpret_cast(&resultSet)); - return resultSet->resultSet_; + return resultSet->GetInstance(); } napi_value DataShareResultSetProxy::GoToFirstRow(napi_env env, napi_callback_info info) @@ -357,13 +357,13 @@ napi_value DataShareResultSetProxy::Close(napi_env env, napi_callback_info info) if (resultSet == nullptr) { return DataShareJSUtils::Convert2JSValue(env, (errCode == E_OK)); } - auto innerResultSet = resultSet->resultSet_; + auto innerResultSet = resultSet->GetInstance(); if (innerResultSet != nullptr) { errCode = innerResultSet->Close(); if (errCode != E_OK) { LOG_ERROR("failed code:%{public}d", errCode); } - resultSet->resultSet_ = nullptr; + resultSet->SetInstance(nullptr); } else { LOG_ERROR("GetInnerResultSet failed."); } diff --git a/data_share/frameworks/js/napi/dataShare/BUILD.gn b/data_share/frameworks/js/napi/dataShare/BUILD.gn index 6f0d5e2c..bda33175 100644 --- a/data_share/frameworks/js/napi/dataShare/BUILD.gn +++ b/data_share/frameworks/js/napi/dataShare/BUILD.gn @@ -14,6 +14,45 @@ import("//build/ohos.gni") import("//foundation/distributeddatamgr/data_share/datashare.gni") +ohos_shared_library("datashare_jscommon") { + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + include_dirs = [ + "${datashare_common_native_path}/include", + "${datashare_common_napi_path}/include", + "${kvstore_common_path}", + ] + + sources = [ + "${datashare_common_napi_path}/src/datashare_js_utils.cpp", + "${datashare_common_napi_path}/src/datashare_predicates_proxy.cpp", + "${datashare_common_napi_path}/src/napi_datashare_values_bucket.cpp", + ] + + deps = [ "${datashare_innerapi_path}/common:datashare_common" ] + + version_script = "libdatashare_jscommon.map" + + external_deps = [ + "ability_base:zuri", + "c_utils:utils", + "hilog:libhilog", + "hisysevent:libhisysevent", + "hitrace:hitrace_meter", + "hitrace:libhitracechain", + "ipc:ipc_napi", + "ipc:ipc_single", + "napi:ace_napi", + ] + + subsystem_name = "distributeddatamgr" + part_name = "data_share" +} + ohos_shared_library("datashare") { branch_protector_ret = "pac_ret" sanitize = { @@ -29,6 +68,8 @@ ohos_shared_library("datashare") { ] sources = [ + "${datashare_common_napi_path}/src/datashare_error_impl.cpp", + "${datashare_common_napi_path}/src/datashare_result_set_proxy.cpp", "${datashare_napi_path}/dataShare/src/async_call.cpp", "${datashare_napi_path}/dataShare/src/napi_datashare_helper.cpp", "${datashare_napi_path}/dataShare/src/napi_datashare_inner_observer.cpp", @@ -39,6 +80,7 @@ ohos_shared_library("datashare") { ] deps = [ + ":datashare_jscommon", "${datashare_innerapi_path}:datashare_consumer", "${datashare_innerapi_path}/common:datashare_common", "//third_party/libuv:uv", @@ -77,12 +119,10 @@ ohos_shared_library("datasharepredicates") { "${datashare_common_native_path}/include", ] - sources = [ - "${datashare_common_napi_path}/src/datashare_predicates_proxy.cpp", - "${datashare_napi_path}/dataShare/src/native_datashare_predicates_module.cpp", - ] + sources = [ "${datashare_napi_path}/dataShare/src/native_datashare_predicates_module.cpp" ] deps = [ + ":datashare_jscommon", "${datashare_innerapi_path}:datashare_consumer", "${datashare_innerapi_path}/common:datashare_common", ] diff --git a/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h b/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h index 21e06ba9..2208bcf5 100644 --- a/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h +++ b/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h @@ -46,6 +46,8 @@ public: static napi_value Napi_DelTemplate(napi_env env, napi_callback_info info); static napi_value Napi_Publish(napi_env env, napi_callback_info info); static napi_value Napi_GetPublishedData(napi_env env, napi_callback_info info); + static napi_value EnableSilentProxy(napi_env env, napi_callback_info info); + static napi_value DisableSilentProxy(napi_env env, napi_callback_info info); private: static napi_value GetConstructor(napi_env env); @@ -54,6 +56,7 @@ private: static napi_value Napi_UnsubscribeRdbObserver(napi_env env, size_t argc, napi_value *argv, napi_value self); static napi_value Napi_SubscribePublishedObserver(napi_env env, size_t argc, napi_value *argv, napi_value self); static napi_value Napi_UnsubscribePublishedObserver(napi_env env, size_t argc, napi_value *argv, napi_value self); + static napi_value SetSilentSwitch(napi_env env, napi_callback_info info, bool enable); bool HasRegisteredObserver(napi_env env, std::list> &list, napi_value callback); void RegisteredObserver(napi_env env, const std::string &uri, napi_value callback); @@ -75,6 +78,7 @@ private: std::shared_ptr contextF = nullptr; std::shared_ptr contextS = nullptr; std::shared_ptr dataShareHelper = nullptr; + bool silentSwitch = false; CreateContextInfo() : Context(nullptr, nullptr) {}; CreateContextInfo(InputAction input, OutputAction output) : Context(std::move(input), std::move(output)) {}; ~CreateContextInfo() diff --git a/data_share/frameworks/js/napi/dataShare/libdatashare_jscommon.map b/data_share/frameworks/js/napi/dataShare/libdatashare_jscommon.map new file mode 100644 index 00000000..139bc671 --- /dev/null +++ b/data_share/frameworks/js/napi/dataShare/libdatashare_jscommon.map @@ -0,0 +1,21 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +1.0 { + global: + *DataShareJSUtils*; + *DataSharePredicates*; + *DataShareValuesBucket*; + local: + *; +}; \ No newline at end of file diff --git a/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp b/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp index e0f89346..f4d3ca9b 100644 --- a/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp +++ b/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp @@ -30,6 +30,20 @@ using namespace OHOS::AppExecFwk; namespace OHOS { namespace DataShare { static constexpr int MAX_ARGC = 6; +static bool GetSilentUri(napi_env env, napi_value jsValue, std::string &uri) +{ + napi_valuetype valuetype = napi_undefined; + napi_typeof(env, jsValue, &valuetype); + if (valuetype == napi_undefined || valuetype == napi_null) { + return true; + } + if (valuetype == napi_string) { + uri = DataShareJSUtils::Convert2String(env, jsValue); + return true; + } + return false; +} + static DataSharePredicates UnwrapDataSharePredicates(napi_env env, napi_value value) { auto predicates = DataSharePredicatesProxy::GetNativePredicates(env, value); @@ -1115,5 +1129,45 @@ napi_value NapiDataShareHelper::Napi_UnsubscribePublishedObserver(napi_env env, results = proxy->jsPublishedObsManager_->DelObservers(env, nullptr, uris, atoll(subscriberId.c_str())); return DataShareJSUtils::Convert2JSValue(env, results); } + +napi_value NapiDataShareHelper::EnableSilentProxy(napi_env env, napi_callback_info info) +{ + return SetSilentSwitch(env, info, true); +} + +napi_value NapiDataShareHelper::DisableSilentProxy(napi_env env, napi_callback_info info) +{ + return SetSilentSwitch(env, info, false); +} + +napi_value NapiDataShareHelper::SetSilentSwitch(napi_env env, napi_callback_info info, bool enable) +{ + auto context = std::make_shared(); + context->silentSwitch = enable; + auto input = [context](napi_env env, size_t argc, napi_value *argv, napi_value self) -> napi_status { + if (argc != 1 && argc != 2) { + context->error = std::make_shared("1 or 2"); + return napi_invalid_arg; + } + context->contextS = OHOS::AbilityRuntime::GetStageModeContext(env, argv[0]); + NAPI_ASSERT_CALL_ERRCODE(env, context->contextS != nullptr, + context->error = std::make_shared("contextS", "not nullptr"), napi_invalid_arg); + if (argc > 1) { + NAPI_ASSERT_CALL_ERRCODE(env, GetSilentUri(env, argv[1], context->strUri), + context->error = std::make_shared("uri", "string"), napi_invalid_arg); + } + return napi_ok; + }; + auto output = [context](napi_env env, napi_value *result) -> napi_status { + return napi_ok; + }; + auto exec = [context](AsyncCall::Context *ctx) { + OHOS::Uri uri(context->strUri); + DataShareHelper::SetSilentSwitch(uri, context->silentSwitch); + }; + context->SetAction(std::move(input), std::move(output)); + AsyncCall asyncCall(env, info, context); + return asyncCall.Call(env, exec); +} } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp b/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp index 27007ab7..a7267533 100644 --- a/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp +++ b/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp @@ -29,6 +29,8 @@ static napi_value Init(napi_env env, napi_value exports) LOG_DEBUG("Init DataShareHelper"); napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("createDataShareHelper", NapiDataShareHelper::Napi_CreateDataShareHelper), + DECLARE_NAPI_FUNCTION("enableSilentProxy", NapiDataShareHelper::EnableSilentProxy), + DECLARE_NAPI_FUNCTION("disableSilentProxy", NapiDataShareHelper::DisableSilentProxy), }; napi_status status = napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc); LOG_DEBUG("napi_define_properties status : %{public}d", status); diff --git a/data_share/frameworks/native/common/include/callbacks_manager.h b/data_share/frameworks/native/common/include/callbacks_manager.h index 7eae5e93..9a62e2ce 100644 --- a/data_share/frameworks/native/common/include/callbacks_manager.h +++ b/data_share/frameworks/native/common/include/callbacks_manager.h @@ -59,8 +59,7 @@ public: int GetEnabledSubscriberSize(); int GetEnabledSubscriberSize(const Key &key); - void RecoverObservers(std::function &)> recoverObservers); - + std::vector GetKeys(); void SetObserversNotifiedOnEnabled(const Key &key); private: @@ -116,7 +115,7 @@ std::vector CallbacksManager::AddObservers(const } template -void CallbacksManager::RecoverObservers(std::function &)> recoverObservers) +std::vector CallbacksManager::GetKeys() { std::vector keys; { @@ -125,10 +124,9 @@ void CallbacksManager::RecoverObservers(std::function void CallbacksManager::DelLocalObservers(void *subscriber, std::vector &lastDelKeys, std::vector &result) @@ -225,12 +223,12 @@ std::vector> CallbacksManager::GetEnabl template std::vector CallbacksManager::EnableObservers( const std::vector &keys, void *subscriber, - std::function> &)> processOnLocalEnabled, - std::function &, std::vector &)> processOnFirstEnabled) + std::function> &)> enableLocalFunc, + std::function &, std::vector &)> enableServiceFunc) { std::vector result; - std::vector firstRegisterKey; - std::map> localEnabledObservers; + std::vector sendServiceKeys; + std::map> refreshObservers; { std::lock_guard lck(mutex_); for (auto &key : keys) { @@ -239,35 +237,34 @@ std::vector CallbacksManager::EnableObservers( result.emplace_back(key, E_SUBSCRIBER_NOT_EXIST); continue; } - std::vector> enabledObservers = GetEnabledObservers(key); - bool hasEnabled = false; - for (auto &item : callbacks_[key]) { - if (item.subscriber_ != subscriber) { - continue; - } - hasEnabled = true; - if (item.enabled_) { - continue; + + auto& allObservers = it->second; + auto iterator = std::find_if(allObservers.begin(), allObservers.end(), [&subscriber](ObserverNode node) { + if (node.subscriber_ == subscriber) { + return true; } - localEnabledObservers[key].emplace_back(item.observer_, item.isNotifyOnEnabled_); - item.enabled_ = true; - } - if (!hasEnabled) { + return false; + }); + if (iterator == allObservers.end()) { result.emplace_back(key, E_SUBSCRIBER_NOT_EXIST); continue; } - if (!enabledObservers.empty()) { + if (iterator->enabled_) { result.emplace_back(key, E_OK); continue; } - localEnabledObservers.erase(key); - firstRegisterKey.emplace_back(key); + + std::vector> enabledObservers = GetEnabledObservers(key); + if (enabledObservers.empty()) { + sendServiceKeys.emplace_back(key); + } + refreshObservers[key].emplace_back(iterator->observer_, iterator->isNotifyOnEnabled_); + iterator->enabled_ = true; } } - if (!localEnabledObservers.empty()) { - processOnLocalEnabled(localEnabledObservers); - } - processOnFirstEnabled(firstRegisterKey, result); + enableServiceFunc(sendServiceKeys, result); + enableLocalFunc(refreshObservers); + return result; } diff --git a/data_share/frameworks/native/common/include/datashare_abs_result_set.h b/data_share/frameworks/native/common/include/datashare_abs_result_set.h deleted file mode 100644 index 8adebda8..00000000 --- a/data_share/frameworks/native/common/include/datashare_abs_result_set.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef DATASHARE_ABS_RESULT_SET_H -#define DATASHARE_ABS_RESULT_SET_H - -#include -#include -#include "basic/result_set.h" - -namespace OHOS { -namespace DataShare { -class DataShareAbsResultSet : public ResultSet { -public: - DataShareAbsResultSet(); - virtual ~DataShareAbsResultSet(); - virtual int GetRowCount(int &count) override; - virtual int GetAllColumnNames(std::vector &columnNames) override; - virtual int GetBlob(int columnIndex, std::vector &blob) override; - virtual int GetString(int columnIndex, std::string &value) override; - virtual int GetInt(int columnIndex, int &value) override; - virtual int GetLong(int columnIndex, int64_t &value) override; - virtual int GetDouble(int columnIndex, double &value) override; - virtual int IsColumnNull(int columnIndex, bool &isNull) override; - virtual int GoToRow(int position) override; - virtual int GetDataType(int columnIndex, DataType &dataType) override; - int GetRowIndex(int &position) const override; - int GoTo(int offset) override; - int GoToFirstRow() override; - int GoToLastRow() override; - int GoToNextRow() override; - int GoToPreviousRow() override; - int IsAtFirstRow(bool &result) const override; - int IsAtLastRow(bool &result) override; - int IsStarted(bool &result) const override; - int IsEnded(bool &result) override; - int GetColumnCount(int &count) override; - int GetColumnIndex(const std::string &columnName, int &columnIndex) override; - int GetColumnName(int columnIndex, std::string &columnName) override; - bool IsClosed() const override; - int Close() override; - -protected: - // The default position of the result set - static const int INIT_POS = -1; - // Current row position - int rowPos_; - int count_; - // Indicates whether the result set is closed - bool isClosed_; - std::map indexCache_; -}; -} // namespace DataShare -} // namespace OHOS - -#endif diff --git a/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h b/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h index e992208e..fe64078e 100644 --- a/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h +++ b/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h @@ -88,6 +88,8 @@ enum class DataShareServiceInterfaceCode { DATA_SHARE_SERVICE_CMD_DISABLE_SUBSCRIBE_PUBLISHED, DATA_SHARE_SERVICE_CMD_NOTIFY, DATA_SHARE_SERVICE_CMD_NOTIFY_OBSERVERS, + DATA_SHARE_SERVICE_CMD_SET_SILENT_SWITCH, + DATA_SHARE_SERVICE_CMD_IS_SILENT_PROXY_ENABLE, DATA_SHARE_SERVICE_CMD_MAX }; diff --git a/data_share/frameworks/native/common/include/idata_share_service.h b/data_share/frameworks/native/common/include/idata_share_service.h index 0f9a5b9e..176c43c6 100644 --- a/data_share/frameworks/native/common/include/idata_share_service.h +++ b/data_share/frameworks/native/common/include/idata_share_service.h @@ -81,6 +81,10 @@ public: int64_t subscriberId) = 0; virtual void Notify(const std::string &uri) = 0; + + virtual int SetSilentSwitch(const Uri &uri, bool enable) = 0; + + virtual bool IsSilentProxyEnable(const std::string &uri) = 0; }; } // namespace OHOS::DataShare #endif diff --git a/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp b/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp index 59482ef6..d4f98e71 100644 --- a/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp +++ b/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp @@ -97,11 +97,7 @@ int DataShareAbsResultSet::GoTo(int offset) int DataShareAbsResultSet::GoToFirstRow() { DISTRIBUTED_DATA_HITRACE(std::string(__FUNCTION__)); - int ret = GoToRow(0); - if (ret != E_OK) { - LOG_WARN("return GoToFirstRow ret is wrong!"); - } - return ret; + return GoToRow(0); } int DataShareAbsResultSet::GoToLastRow() @@ -122,20 +118,12 @@ int DataShareAbsResultSet::GoToLastRow() int DataShareAbsResultSet::GoToNextRow() { - int ret = GoToRow(rowPos_ + 1); - if (ret != E_OK) { - LOG_WARN("return GoToNextRow ret is wrong!"); - } - return ret; + return GoToRow(rowPos_ + 1); } int DataShareAbsResultSet::GoToPreviousRow() { - int ret = GoToRow(rowPos_ - 1); - if (ret != E_OK) { - LOG_WARN("return GoToPreviousRow ret is wrong!"); - } - return ret; + return GoToRow(rowPos_ - 1); } int DataShareAbsResultSet::IsAtFirstRow(bool &result) const diff --git a/data_share/frameworks/native/common/src/ikvstore_data_service.cpp b/data_share/frameworks/native/common/src/ikvstore_data_service.cpp index 89f4672a..f1dbf341 100644 --- a/data_share/frameworks/native/common/src/ikvstore_data_service.cpp +++ b/data_share/frameworks/native/common/src/ikvstore_data_service.cpp @@ -29,7 +29,6 @@ DataShareKvServiceProxy::DataShareKvServiceProxy(const sptr &impl sptr DataShareKvServiceProxy::GetFeatureInterface(const std::string &name) { - LOG_INFO("GetDataShareService enter."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareKvServiceProxy::GetDescriptor())) { LOG_ERROR("Write descriptor failed"); diff --git a/data_share/frameworks/native/consumer/controller/common/general_controller.h b/data_share/frameworks/native/consumer/controller/common/general_controller.h index 3fac63bd..c8f7ee85 100644 --- a/data_share/frameworks/native/consumer/controller/common/general_controller.h +++ b/data_share/frameworks/native/consumer/controller/common/general_controller.h @@ -13,6 +13,9 @@ * limitations under the License. */ +#ifndef GENERAL_CONTROLLER_H +#define GENERAL_CONTROLLER_H + #include #include @@ -22,8 +25,6 @@ #include "datashare_values_bucket.h" #include "uri.h" -#ifndef GENERAL_CONTROLLER_H -#define GENERAL_CONTROLLER_H namespace OHOS { namespace AAFwk { class IDataAbilityObserver; diff --git a/data_share/frameworks/native/consumer/include/datashare_connection.h b/data_share/frameworks/native/consumer/include/datashare_connection.h index a72461b2..723ed0e3 100644 --- a/data_share/frameworks/native/consumer/include/datashare_connection.h +++ b/data_share/frameworks/native/consumer/include/datashare_connection.h @@ -18,6 +18,7 @@ #include #include +#include #include "ability_connect_callback_stub.h" #include "datashare_proxy.h" @@ -72,9 +73,8 @@ private: std::condition_variable condition; std::mutex mutex; }; - void SetDataShareProxy(sptr proxy); std::shared_ptr ConnectDataShareExtAbility(const Uri &uri, const sptr &token); - std::mutex mutex_; + std::mutex mutex_{}; std::shared_ptr dataShareProxy_; ConnectCondition condition_; Uri uri_; diff --git a/data_share/frameworks/native/consumer/include/datashare_proxy.h b/data_share/frameworks/native/consumer/include/datashare_proxy.h index 82c23341..8da85279 100644 --- a/data_share/frameworks/native/consumer/include/datashare_proxy.h +++ b/data_share/frameworks/native/consumer/include/datashare_proxy.h @@ -65,6 +65,7 @@ public: private: static inline BrokerDelegator delegator_; + static const size_t MTU_SIZE = 912600; // 900k }; } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/native/consumer/src/datashare_connection.cpp b/data_share/frameworks/native/consumer/src/datashare_connection.cpp index 9c0d87f0..be1701b3 100644 --- a/data_share/frameworks/native/consumer/src/datashare_connection.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_connection.cpp @@ -22,7 +22,7 @@ namespace OHOS { namespace DataShare { using namespace AppExecFwk; -constexpr int WAIT_TIME = 1; +constexpr int WAIT_TIME = 2; /** * @brief This method is called back to receive the connection result after an ability calls the * ConnectAbility method to connect it to an extension ability. @@ -35,13 +35,16 @@ constexpr int WAIT_TIME = 1; void DataShareConnection::OnAbilityConnectDone( const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) { - LOG_INFO("on connect done, uri:%{public}s, ret=%{public}d", uri_.ToString().c_str(), resultCode); + LOG_INFO("on connect done, req uri:%{public}s, rev uri:%{public}s, ret=%{public}d", uri_.ToString().c_str(), + element.GetURI().c_str(), resultCode); if (remoteObject == nullptr) { LOG_ERROR("remote is nullptr"); + condition_.condition.notify_all(); return; } - std::unique_lock lock(condition_.mutex); - SetDataShareProxy(new (std::nothrow) DataShareProxy(remoteObject)); + std::lock_guard lock(mutex_); + sptr proxy = new (std::nothrow) DataShareProxy(remoteObject); + dataShareProxy_ = std::shared_ptr(proxy.GetRefPtr(), [holder = proxy](const auto *) {}); condition_.condition.notify_all(); } @@ -56,15 +59,24 @@ void DataShareConnection::OnAbilityConnectDone( */ void DataShareConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) { - LOG_INFO("on disconnect done, uri:%{public}s, ret:%{public}d", uri_.ToString().c_str(), resultCode); + LOG_INFO("on disconnect done, req uri:%{public}s, rev uri:%{public}s, ret=%{public}d", uri_.ToString().c_str(), + element.GetURI().c_str(), resultCode); + std::string uri; { - std::unique_lock lock(condition_.mutex); - SetDataShareProxy(nullptr); - condition_.condition.notify_all(); + std::lock_guard lock(mutex_); + dataShareProxy_ = nullptr; + uri = uri_.ToString(); } - if (!uri_.ToString().empty()) { - ConnectDataShareExtAbility(uri_, token_); + if (uri.empty()) { + return; } + AmsMgrProxy* instance = AmsMgrProxy::GetInstance(); + if (instance == nullptr) { + LOG_ERROR("get proxy failed uri:%{public}s", uri.c_str()); + return; + } + ErrCode ret = instance->Connect(uri, this, token_); + LOG_INFO("reconnect ability, uri:%{public}s, ret = %{public}d", uri.c_str(), ret); } /** @@ -73,26 +85,31 @@ void DataShareConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName std::shared_ptr DataShareConnection::ConnectDataShareExtAbility(const Uri &uri, const sptr &token) { - if (dataShareProxy_ != nullptr) { - return dataShareProxy_; + std::string reqUri; + { + std::lock_guard lock(mutex_); + if (dataShareProxy_ != nullptr) { + return dataShareProxy_; + } + reqUri = uri_.ToString().empty() ? uri.ToString() : uri_.ToString(); } - auto reqUri = uri_.ToString().empty() ? uri.ToString() : uri_.ToString(); + AmsMgrProxy* instance = AmsMgrProxy::GetInstance(); if (instance == nullptr) { - LOG_ERROR("Connect: AmsMgrProxy::GetInstance failed"); + LOG_ERROR("get proxy failed uri:%{public}s", reqUri.c_str()); return nullptr; } ErrCode ret = instance->Connect(reqUri, this, token); + LOG_INFO("connect ability, uri = %{public}s. ret = %{public}d", reqUri.c_str(), ret); if (ret != ERR_OK) { - LOG_ERROR("connect ability failed, ret = %{public}d", ret); return nullptr; } - std::unique_lock lock(condition_.mutex); - if (condition_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), + std::unique_lock condLock(condition_.mutex); + if (condition_.condition.wait_for(condLock, std::chrono::seconds(WAIT_TIME), [this] { return dataShareProxy_ != nullptr; })) { - LOG_DEBUG("connect ability ended successfully"); + LOG_DEBUG("connect ability ended successfully uri:%{public}s", reqUri.c_str()); } else { - LOG_WARN("connect timeout"); + LOG_WARN("connect timeout uri:%{public}s", reqUri.c_str()); } return dataShareProxy_; } @@ -102,38 +119,24 @@ std::shared_ptr DataShareConnection::ConnectDataShareExtAbility( */ void DataShareConnection::DisconnectDataShareExtAbility() { - uri_ = Uri(""); - if (dataShareProxy_ == nullptr) { - return; + std::string uri; + { + std::lock_guard lock(mutex_); + uri = uri_.ToString(); + uri_ = Uri(""); + if (dataShareProxy_ == nullptr) { + return; + } } + AmsMgrProxy* instance = AmsMgrProxy::GetInstance(); if (instance == nullptr) { - LOG_ERROR("Disconnect: AmsMgrProxy::GetInstance failed"); + LOG_ERROR("get proxy failed uri:%{public}s", uri.c_str()); return; } - ErrCode ret = instance->DisConnect(this); - if (ret != ERR_OK) { - LOG_ERROR("disconnect ability failed, ret = %{public}d", ret); - return; - } - std::unique_lock lock(condition_.mutex); - if (condition_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), - [this] { return dataShareProxy_ == nullptr; })) { - LOG_DEBUG("disconnect ability successfully"); - } else { - LOG_INFO("disconnect timeout"); - } -} -void DataShareConnection::SetDataShareProxy(sptr proxy) -{ - if (proxy == nullptr) { - dataShareProxy_ = nullptr; - return; - } - - dataShareProxy_ = - std::shared_ptr(proxy.GetRefPtr(), [holder = proxy](const auto *) {}); + ErrCode ret = instance->DisConnect(this); + LOG_INFO("disconnect uri:%{public}s, ret = %{public}d", uri.c_str(), ret); } DataShareConnection::~DataShareConnection() diff --git a/data_share/frameworks/native/consumer/src/datashare_helper.cpp b/data_share/frameworks/native/consumer/src/datashare_helper.cpp index 207c58b5..b545f568 100644 --- a/data_share/frameworks/native/consumer/src/datashare_helper.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_helper.cpp @@ -29,6 +29,7 @@ namespace { static constexpr const char *DATA_SHARE_PREFIX = "datashare:///"; static constexpr const char *FILE_PREFIX = "file://"; } // namespace +constexpr int INVALID_VALUE = -1; class ObserverImpl : public AAFwk::DataAbilityObserverStub { public: explicit ObserverImpl(const std::shared_ptr dataShareObserver) @@ -83,9 +84,12 @@ std::shared_ptr DataShareHelper::Creator( if (uri.GetQuery().find("Proxy=true") != std::string::npos) { auto result = CreateServiceHelper(); - if (result != nullptr || extUri.empty()) { + if (result != nullptr && IsSilentProxyEnable(strUri)) { return result; } + if (extUri.empty()) { + return nullptr; + } Uri ext(extUri); return CreateExtHelper(ext, token); } @@ -121,6 +125,16 @@ std::shared_ptr DataShareHelper::CreateServiceHelper(const std: return std::make_shared(); } +bool DataShareHelper::IsSilentProxyEnable(const std::string &uri) +{ + auto proxy = DataShareManagerImpl::GetServiceProxy(); + if (proxy == nullptr) { + LOG_ERROR("Service proxy is nullptr."); + return false; + } + return proxy->IsSilentProxyEnable(uri); +} + std::shared_ptr DataShareHelper::CreateExtHelper(Uri &uri, const sptr &token) { sptr connection = new (std::nothrow) DataShareConnection(uri, token); @@ -298,5 +312,15 @@ bool ObserverImpl::DeleteObserver(const Uri& uri, const std::shared_ptrSetSilentSwitch(uri, enable); +} } // namespace DataShare } // namespace OHOS \ No newline at end of file diff --git a/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp b/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp index 92818bed..4c7d5253 100644 --- a/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp @@ -177,7 +177,6 @@ int DataShareHelperImpl::ExecuteBatch(const std::vector &sta void DataShareHelperImpl::RegisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("Start"); if (dataObserver == nullptr) { LOG_ERROR("dataObserver is nullptr"); return; @@ -192,7 +191,6 @@ void DataShareHelperImpl::RegisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("Start"); if (dataObserver == nullptr) { LOG_ERROR("dataObserver is nullptr"); return; diff --git a/data_share/frameworks/native/consumer/src/datashare_proxy.cpp b/data_share/frameworks/native/consumer/src/datashare_proxy.cpp index 003e3b38..9dd419e5 100644 --- a/data_share/frameworks/native/consumer/src/datashare_proxy.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_proxy.cpp @@ -144,6 +144,7 @@ int DataShareProxy::Insert(const Uri &uri, const DataShareValuesBucket &value) { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -172,6 +173,7 @@ int DataShareProxy::InsertExt(const Uri &uri, const DataShareValuesBucket &value { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -199,6 +201,7 @@ int DataShareProxy::Update(const Uri &uri, const DataSharePredicates &predicates { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -226,6 +229,7 @@ int DataShareProxy::Delete(const Uri &uri, const DataSharePredicates &predicates { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -278,7 +282,6 @@ std::shared_ptr DataShareProxy::Query(const Uri &uri, const std::string DataShareProxy::GetType(const Uri &uri) { - LOG_INFO("begin."); std::string type; MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { @@ -308,15 +311,14 @@ std::string DataShareProxy::GetType(const Uri &uri) return type; } - LOG_INFO("end successfully."); return type; } int DataShareProxy::BatchInsert(const Uri &uri, const std::vector &values) { - LOG_INFO("begin."); int ret = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return ret; @@ -338,13 +340,13 @@ int DataShareProxy::BatchInsert(const Uri &uri, const std::vector &statements, ExecResultSet &result) { MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return -1; @@ -371,7 +373,6 @@ int DataShareProxy::ExecuteBatch(const std::vector &statemen bool DataShareProxy::RegisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -387,19 +388,15 @@ bool DataShareProxy::RegisterObserver(const Uri &uri, const sptrSendRequest( static_cast(IDataShareInterfaceCode::CMD_REGISTER_OBSERVER), data, reply, option); - if (result == ERR_NONE) { - LOG_INFO("SendRequest ok, retval is %{public}d", reply.ReadInt32()); - } else { + if (result != ERR_NONE) { LOG_ERROR("SendRequest error, result=%{public}d", result); return false; } - LOG_INFO("end."); return true; } bool DataShareProxy::UnregisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -414,19 +411,15 @@ bool DataShareProxy::UnregisterObserver(const Uri &uri, const sptrSendRequest( static_cast(IDataShareInterfaceCode::CMD_UNREGISTER_OBSERVER), data, reply, option); - if (result == ERR_NONE) { - LOG_INFO("SendRequest ok, retval is %{public}d", reply.ReadInt32()); - } else { + if (result != ERR_NONE) { LOG_ERROR("SendRequest error, result=%{public}d", result); return false; } - LOG_INFO("end successfully."); return true; } bool DataShareProxy::NotifyChange(const Uri &uri) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -441,19 +434,15 @@ bool DataShareProxy::NotifyChange(const Uri &uri) MessageOption option; int32_t result = Remote()->SendRequest( static_cast(IDataShareInterfaceCode::CMD_NOTIFY_CHANGE), data, reply, option); - if (result == ERR_NONE) { - LOG_INFO("SendRequest ok, retval is %{public}d", reply.ReadInt32()); - } else { + if (result != ERR_NONE) { LOG_ERROR("SendRequest error, result=%{public}d", result); return false; } - LOG_INFO("end successfully."); return true; } Uri DataShareProxy::NormalizeUri(const Uri &uri) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -477,13 +466,11 @@ Uri DataShareProxy::NormalizeUri(const Uri &uri) LOG_ERROR("fail to Unmarshal index"); return Uri(""); } - LOG_INFO("end successfully."); return info; } Uri DataShareProxy::DenormalizeUri(const Uri &uri) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -509,7 +496,6 @@ Uri DataShareProxy::DenormalizeUri(const Uri &uri) LOG_ERROR("fail to Unmarshal index"); return Uri(""); } - LOG_INFO("end successfully."); return info; } } // namespace DataShare diff --git a/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h b/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h index 929f6b6d..6b4d84a9 100644 --- a/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h +++ b/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h @@ -232,13 +232,13 @@ public: */ Uri DenormalizeUri(const Uri &uri) override; - bool GetBlockWaiting() const + bool GetRecvReply() const { - return isBlockWaiting_; + return isRecvReply_; } - void SetBlockWaiting(bool blockWaiting) + void SetRecvReply(bool recvReply) { - isBlockWaiting_ = blockWaiting; + isRecvReply_ = recvReply; } napi_value GetAsyncResult() const @@ -309,6 +309,9 @@ private: struct AsyncPoint { std::shared_ptr context; }; + struct AsyncCallBackPoint { + std::weak_ptr extAbility; + }; napi_value CallObjectMethod(const char *name, napi_value const *argv = nullptr, size_t argc = 0, bool isAsync = true); napi_value CallObjectMethod( @@ -323,10 +326,11 @@ private: static napi_valuetype UnWrapPropertyType(napi_env env, napi_value info, const std::string &key); static std::string UnWrapProperty(napi_env env, napi_value info, const std::string &key); + int32_t InitAsyncCallParams(size_t argc, napi_env &env, napi_value *args); JsRuntime& jsRuntime_; std::unique_ptr jsObj_; - bool isBlockWaiting_ = false; + bool isRecvReply_ = false; napi_value callbackData_ = nullptr; int callbackResultNumber_ = -1; std::string callbackResultString_ = ""; diff --git a/data_share/frameworks/native/provider/src/datashare_stub.cpp b/data_share/frameworks/native/provider/src/datashare_stub.cpp index 15bcd20e..baf4391b 100644 --- a/data_share/frameworks/native/provider/src/datashare_stub.cpp +++ b/data_share/frameworks/native/provider/src/datashare_stub.cpp @@ -112,8 +112,7 @@ ErrCode DataShareStub::CmdOpenFile(MessageParcel &data, MessageParcel &reply) } int fd = OpenFile(uri, mode); if (fd < 0) { - LOG_ERROR("OpenFile fail, fd is %{public}d", fd); - return ERR_INVALID_VALUE; + return ERR_INVALID_DATA; } if (!reply.WriteFileDescriptor(fd)) { LOG_ERROR("fail to WriteFileDescriptor fd"); @@ -160,7 +159,6 @@ ErrCode DataShareStub::CmdInsert(MessageParcel &data, MessageParcel &reply) LOG_ERROR("fail to WriteInt32 index"); return ERR_INVALID_VALUE; } - LOG_INFO("DataShareStub::CmdInsertInner end"); return DATA_SHARE_NO_ERROR; } diff --git a/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp b/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp index 81fb2304..57c9af57 100644 --- a/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp +++ b/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp @@ -128,7 +128,7 @@ int DataShareStubImpl::Insert(const Uri &uri, const DataShareValuesBucket &value return false; } extension->GetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -163,7 +163,7 @@ int DataShareStubImpl::Update(const Uri &uri, const DataSharePredicates &predica return false; } extension->GetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -197,7 +197,7 @@ int DataShareStubImpl::Delete(const Uri &uri, const DataSharePredicates &predica return false; } extension->GetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -233,7 +233,7 @@ std::shared_ptr DataShareStubImpl::Query(const Uri &uri, extension->SetCallingInfo(info); extension->GetResultSet(resultSet); extension->GetBusinessError(businessError); - return (resultSet != nullptr); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -289,7 +289,7 @@ int DataShareStubImpl::BatchInsert(const Uri &uri, const std::vectorGetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); diff --git a/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp b/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp index bf2eae50..4995d831 100644 --- a/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp +++ b/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp @@ -19,7 +19,7 @@ namespace OHOS { namespace DataShare { -constexpr int WAIT_TIME = 60; +constexpr int WAIT_TIME = 3; constexpr int SLEEP_TIME = 1; constexpr int TRY_TIMES = 2000; DataShareUvQueue::DataShareUvQueue(napi_env env) @@ -66,10 +66,6 @@ void DataShareUvQueue::SyncCall(NapiVoidFunc func, NapiBoolFunc retFunc) bool noNeedPurge = false; auto *uvEntry = static_cast(work->data); { - if (uvEntry == nullptr) { - LOG_ERROR("invalid uvEntry."); - return; - } std::unique_lock lock(uvEntry->mutex); auto status = uv_queue_work( loop_, work, [](uv_work_t *work) {}, LambdaForWork); diff --git a/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp b/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp index cb31e876..d6bdc09c 100644 --- a/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp +++ b/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp @@ -24,6 +24,7 @@ #include "idata_share_service.h" #include "iservice_registry.h" #include "js_datashare_ext_ability_context.h" +#include "js_proxy.h" #include "js_runtime.h" #include "js_runtime_utils.h" #include "napi_common_util.h" @@ -153,7 +154,7 @@ void JsDataShareExtAbility::CheckAndSetAsyncResult(napi_env env) std::string value = OHOS::AppExecFwk::UnwrapStringFromJS(env, result); SetResult(value); } else if (type == napi_valuetype::napi_object) { - ResultSetBridge::Creator *proxy = nullptr; + JSProxy::JSCreator *proxy = nullptr; napi_unwrap(env, result, reinterpret_cast(&proxy)); if (proxy == nullptr) { std::vector value; @@ -192,6 +193,12 @@ napi_value JsDataShareExtAbility::AsyncCallback(napi_env env, napi_callback_info return CreateJsUndefined(env); } + AsyncCallBackPoint* point = static_cast(data); + auto instance = point->extAbility.lock(); + if (!instance) { + LOG_ERROR("extension ability has been destroyed."); + return CreateJsUndefined(env); + } DatashareBusinessError businessError; napi_valuetype type = napi_undefined; napi_typeof(env, argv[0], &type); @@ -199,12 +206,11 @@ napi_value JsDataShareExtAbility::AsyncCallback(napi_env env, napi_callback_info LOG_INFO("Error in callback"); UnWrapBusinessError(env, argv[0], businessError); } - JsDataShareExtAbility* instance = reinterpret_cast(data); if (instance != nullptr) { - instance->SetBlockWaiting(true); instance->SetBusinessError(businessError); instance->SetAsyncResult(argv[1]); instance->CheckAndSetAsyncResult(env); + instance->SetRecvReply(true); } return CreateJsUndefined(env); } @@ -285,7 +291,8 @@ napi_value JsDataShareExtAbility::CallObjectMethod( return result; } -napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value const *argv, size_t argc, bool isAsync) +napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value const *argv, + size_t argc, bool isAsync) { if (!jsObj_) { LOG_WARN("Not found DataShareExtAbility.js"); @@ -318,17 +325,16 @@ napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value } if (isAsync) { - callbackResultNumber_ = -1; - callbackResultString_ = ""; - callbackResultStringArr_ = {}; - SetResultSet(nullptr); - napi_create_function(env, ASYNC_CALLBACK_NAME, CALLBACK_LENGTH, - JsDataShareExtAbility::AsyncCallback, this, &args[argc]); + auto ret = InitAsyncCallParams(argc, env, args); + if (ret != E_OK) { + LOG_ERROR("Failed to InitAsyncCallParams in isAsync."); + delete [] args; + return nullptr; + } } else { args[argc] = nullptr; } - SetBlockWaiting(false); napi_value remoteNapi = nullptr; napi_status status = napi_call_function(env, obj, method, count, args, &remoteNapi); delete []args; @@ -338,6 +344,27 @@ napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value return handleEscape.Escape(remoteNapi); } +int32_t JsDataShareExtAbility::InitAsyncCallParams(size_t argc, napi_env &env, napi_value *args) +{ + AsyncCallBackPoint *point = new (std::nothrow)AsyncCallBackPoint(); + if (point == nullptr) { + return E_ERROR; + } + callbackResultNumber_ = -1; + callbackResultString_ = ""; + callbackResultStringArr_ = {}; + SetResultSet(nullptr); + SetRecvReply(false); + point->extAbility = std::static_pointer_cast(shared_from_this()); + napi_create_function(env, ASYNC_CALLBACK_NAME, CALLBACK_LENGTH, + JsDataShareExtAbility::AsyncCallback, point, &args[argc]); + napi_add_finalizer(env, args[argc], point, + [](napi_env env, void* point, void* finalize_hint) { + delete static_cast(point); + }, nullptr, nullptr); + return E_OK; +} + void JsDataShareExtAbility::GetSrcPath(std::string &srcPath) { if (!Extension::abilityInfo_->isStageBasedModel) { @@ -384,6 +411,7 @@ std::vector JsDataShareExtAbility::GetFileTypes(const Uri &uri, con return ret; } napi_value argv[] = {napiUri, napiMimeTypeFilter}; + //represents this function has 2 parameters CallObjectMethod("getFileTypes", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -414,6 +442,7 @@ int JsDataShareExtAbility::OpenFile(const Uri &uri, const std::string &mode) return ret; } napi_value argv[] = {napiUri, napiMode}; + //represents this function has 2 parameters CallObjectMethod("openFile", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -444,6 +473,7 @@ int JsDataShareExtAbility::OpenRawFile(const Uri &uri, const std::string &mode) return ret; } napi_value argv[] = {napiUri, napiMode}; + //represents this function has 2 parameters CallObjectMethod("openRawFile", argv, 2, false); napi_close_handle_scope(env, scope); return ret; @@ -474,6 +504,7 @@ int JsDataShareExtAbility::Insert(const Uri &uri, const DataShareValuesBucket &v return ret; } napi_value argv[] = {napiUri, napiValue}; + //represents this function has 2 parameters CallObjectMethod("insert", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -513,6 +544,7 @@ int JsDataShareExtAbility::Update(const Uri &uri, const DataSharePredicates &pre } napi_value argv[] = {napiUri, napiPredicates, napiValue}; + //represents this function has 3 parameters CallObjectMethod("update", argv, 3); napi_close_handle_scope(env, scope); return ret; @@ -544,6 +576,7 @@ int JsDataShareExtAbility::Delete(const Uri &uri, const DataSharePredicates &pre } napi_value argv[] = {napiUri, napiPredicates}; + //represents this function has 2 parameters CallObjectMethod("delete", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -584,9 +617,10 @@ std::shared_ptr JsDataShareExtAbility::Query(const Uri &uri, } napi_value argv[] = {napiUri, napiPredicates, napiColumns}; + //represents this function has 3 parameters CallObjectMethod("query", argv, 3); napi_close_handle_scope(env, scope); - return std::make_shared(); + return ret; } std::string JsDataShareExtAbility::GetType(const Uri &uri) @@ -607,6 +641,7 @@ std::string JsDataShareExtAbility::GetType(const Uri &uri) return ret; } napi_value argv[] = {napiUri}; + //represents this function has 1 parameter CallObjectMethod("getType", argv, 1); napi_close_handle_scope(env, scope); return ret; @@ -656,6 +691,7 @@ int JsDataShareExtAbility::BatchInsert(const Uri &uri, const std::vector GetDistributedDataManager(); + static sptr GetDistributedDataManager(); static std::mutex pmutex_; static DataShareManagerImpl* manager_; std::mutex mutex_; - std::shared_ptr dataMgrService_; + sptr dataMgrService_; std::shared_ptr dataShareService_; std::string bundleName_; static constexpr int WAIT_TIME = 2; diff --git a/data_share/frameworks/native/proxy/include/data_share_service_proxy.h b/data_share/frameworks/native/proxy/include/data_share_service_proxy.h index 23690e91..ded0ea8a 100644 --- a/data_share/frameworks/native/proxy/include/data_share_service_proxy.h +++ b/data_share/frameworks/native/proxy/include/data_share_service_proxy.h @@ -69,6 +69,10 @@ public: const std::vector &uris, int64_t subscriberId) override; void Notify(const std::string &uri) override; + int SetSilentSwitch(const Uri &uri, bool enable) override; + + bool IsSilentProxyEnable(const std::string &uri) override; + private: static inline BrokerDelegator delegator_; }; diff --git a/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp b/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp index 13f4dc4f..5fbb9ccc 100644 --- a/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp +++ b/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp @@ -54,7 +54,7 @@ AmsMgrProxy* AmsMgrProxy::GetInstance() } proxy = new AmsMgrProxy(); if (proxy == nullptr) { - LOG_ERROR("new AmsMgrProxy failed"); + LOG_ERROR("new proxy failed"); } return proxy; } @@ -66,12 +66,7 @@ int AmsMgrProxy::Connect( want.SetUri(uri); std::lock_guard lock(mutex_); if (ConnectSA()) { - LOG_INFO("connect datashareextability start, uri = %{public}s.", uri.c_str()); - int ret = proxy_->ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::DATASHARE); - if (ret != ERR_OK) { - LOG_ERROR("connect ability failed, uri = %{public}s, ret = %{public}d", uri.c_str(), ret); - } - return ret; + return proxy_->ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::DATASHARE); } return -1; } @@ -90,19 +85,19 @@ bool AmsMgrProxy::ConnectSA() sa_ = systemAbilityManager->GetSystemAbility(ABILITY_MGR_SERVICE_ID); if (sa_ == nullptr) { - LOG_ERROR("Failed to GetSystemAbility."); + LOG_ERROR("get ability manager service failed."); return false; } deathRecipient_ = new (std::nothrow) AmsMgrProxy::ServiceDeathRecipient(this); if (deathRecipient_ == nullptr) { - LOG_ERROR("deathRecipient alloc failed."); + LOG_ERROR("new death recipient failed."); return false; } sa_->AddDeathRecipient(deathRecipient_); proxy_ = new (std::nothrow)Proxy(sa_); if (proxy_ == nullptr) { - LOG_ERROR("proxy_ null, new failed"); + LOG_ERROR("new proxy failed"); return false; } return true; @@ -112,11 +107,7 @@ int AmsMgrProxy::DisConnect(sptr connect) { std::lock_guard lock(mutex_); if (ConnectSA()) { - int ret = proxy_->DisconnectAbility(connect); - if (ret != ERR_OK) { - LOG_ERROR("DisconnectAbility failed, ret = %{public}d", ret); - } - return ret; + return proxy_->DisconnectAbility(connect); } return -1; } diff --git a/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp b/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp index 9f533010..44fca74e 100644 --- a/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp +++ b/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp @@ -49,7 +49,7 @@ DataShareManagerImpl* DataShareManagerImpl::GetInstance() } -std::shared_ptr DataShareManagerImpl::GetDistributedDataManager() +sptr DataShareManagerImpl::GetDistributedDataManager() { auto manager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (manager == nullptr) { @@ -61,8 +61,12 @@ std::shared_ptr DataShareManagerImpl::GetDistributedDat LOG_ERROR("get distributed data manager failed"); return nullptr; } - LOG_INFO("get distributed data manager success"); - return std::make_shared(remoteObject); + sptr proxy = new (std::nothrow)DataShareKvServiceProxy(remoteObject); + if (proxy == nullptr) { + LOG_ERROR("new DataShareKvServiceProxy fail."); + return nullptr; + } + return proxy; } void DataShareManagerImpl::LinkToDeath(const sptr remote) @@ -76,7 +80,7 @@ void DataShareManagerImpl::LinkToDeath(const sptr remote) if (!remote->AddDeathRecipient(deathRecipient)) { LOG_ERROR("add death recipient failed"); } - LOG_ERROR("link to death success"); + LOG_INFO("link to death success"); } sptr DataShareManagerImpl::GetDataShareServiceProxy() @@ -110,7 +114,11 @@ void DataShareManagerImpl::RegisterClientDeathObserver() LOG_WARN("new KvStoreClientDeathObserver failed"); return; } - dataMgrService_->RegisterClientDeathObserver(bundleName_, clientDeathObserverPtr_); + auto status = dataMgrService_->RegisterClientDeathObserver(bundleName_, clientDeathObserverPtr_); + if (!status) { + LOG_ERROR("RegisterClientDeathObserver failed, bundleName is %{public}s", bundleName_.c_str()); + return; + } } DataShareManagerImpl::DataShareManagerImpl() diff --git a/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp b/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp index ef0ddd8a..694b7fce 100644 --- a/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp +++ b/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp @@ -469,5 +469,56 @@ void DataShareServiceProxy::Notify(const std::string &uri) return; } } + +int DataShareServiceProxy::SetSilentSwitch(const Uri &uri, bool enable) +{ + const std::string &uriStr = uri.ToString(); + MessageParcel data; + if (!data.WriteInterfaceToken(IDataShareService::GetDescriptor())) { + LOG_ERROR("Write descriptor failed!"); + return DATA_SHARE_ERROR; + } + if (!ITypesUtil::Marshal(data, uriStr, enable)) { + LOG_ERROR("Write to message parcel failed!"); + return DATA_SHARE_ERROR; + } + + MessageParcel reply; + MessageOption option; + int32_t err = Remote()->SendRequest( + static_cast(InterfaceCode::DATA_SHARE_SERVICE_CMD_SET_SILENT_SWITCH), data, reply, option); + if (err != NO_ERROR) { + LOG_ERROR("SetSilentSwitch fail to SendRequest. uri: %{public}s, err: %{public}d", uriStr.c_str(), err); + return DATA_SHARE_ERROR; + } + return reply.ReadInt32(); +} + +bool DataShareServiceProxy::IsSilentProxyEnable(const std::string &uri) +{ + MessageParcel data; + if (!data.WriteInterfaceToken(IDataShareService::GetDescriptor())) { + LOG_ERROR("Write descriptor failed!"); + return false; + } + if (!ITypesUtil::Marshal(data, uri)) { + LOG_ERROR("Write to message parcel failed!"); + return false; + } + + MessageParcel reply; + MessageOption option; + int32_t err = Remote()->SendRequest( + static_cast(InterfaceCode::DATA_SHARE_SERVICE_CMD_IS_SILENT_PROXY_ENABLE), data, reply, option); + if (err != NO_ERROR) { + LOG_ERROR("Is silent proxy enable fail to SendRequest. uri: %{public}s, err: %{public}d", uri.c_str(), err); + return false; + } + bool enable = false; + if (!ITypesUtil::Unmarshal(reply, enable)) { + LOG_ERROR("Is silent proxy Unmarshal failed."); + } + return enable; +} } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp b/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp index 8536df3a..6ec27fd3 100644 --- a/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp +++ b/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp @@ -194,21 +194,21 @@ void PublishedDataSubscriberManager::RecoverObservers(std::shared_ptr &Keys) { - std::map> keysMap; - for (auto const &key : Keys) { - keysMap[key.subscriberId_].emplace_back(key.uri_); - } - for (auto const &[subscriberId, uris] : keysMap) { - auto results = proxy->SubscribePublishedData(uris, subscriberId, serviceCallback_); - for (const auto& result : results) { - if (result.errCode_ != E_OK) { - LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", - result.key_.c_str(), result.errCode_); - } + + std::map> keysMap; + std::vector keys = CallbacksManager::GetKeys(); + for (const auto& key : keys) { + keysMap[key.subscriberId_].emplace_back(key.uri_); + } + for (const auto &[subscriberId, uris] : keysMap) { + auto results = proxy->SubscribePublishedData(uris, subscriberId, serviceCallback_); + for (const auto& result : results) { + if (result.errCode_ != E_OK) { + LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", + result.key_.c_str(), result.errCode_); } } - }); + } } void PublishedDataSubscriberManager::Emit(PublishedDataChangeNode &changeNode) diff --git a/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp b/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp index 1feffaee..6ef1f4bd 100644 --- a/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp +++ b/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp @@ -200,21 +200,20 @@ void RdbSubscriberManager::RecoverObservers(std::shared_ptr &Keys) { - std::map> keysMap; - for (auto const &key : Keys) { - keysMap[key.templateId_].emplace_back(key.uri_); - } - for (auto const &[templateId, uris] : keysMap) { - auto results = proxy->SubscribeRdbData(uris, templateId, serviceCallback_); - for (const auto& result : results) { - if (result.errCode_ != E_OK) { - LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", - result.key_.c_str(), result.errCode_); - } + std::map> keysMap; + std::vector keys = CallbacksManager::GetKeys(); + for (const auto& key : keys) { + keysMap[key.templateId_].emplace_back(key.uri_); + } + for (const auto& [templateId, uris] : keysMap) { + auto results = proxy->SubscribeRdbData(uris, templateId, serviceCallback_); + for (const auto& result : results) { + if (result.errCode_ != E_OK) { + LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", result.key_.c_str(), + result.errCode_); } } - }); + } } void RdbSubscriberManager::Emit(const RdbChangeNode &changeNode) diff --git a/data_share/interfaces/inner_api/BUILD.gn b/data_share/interfaces/inner_api/BUILD.gn index 777821d5..689e9b99 100644 --- a/data_share/interfaces/inner_api/BUILD.gn +++ b/data_share/interfaces/inner_api/BUILD.gn @@ -40,7 +40,6 @@ config("datashare_public_config") { "common/include", "consumer/include", "provider/include", - "${datashare_common_napi_path}/include", "${datashare_common_native_path}/include", "${datashare_native_consumer_path}/controller/common", "${datashare_native_consumer_path}/controller/provider/include", @@ -48,6 +47,7 @@ config("datashare_public_config") { "${datashare_native_consumer_path}/include", "${datashare_native_provider_path}/include", "${datashare_native_proxy_path}/include", + "${kvstore_common_path}", "${ability_runtime_inner_api_path}/dataobs_manager/include", ] } @@ -82,7 +82,6 @@ datashare_consumer_external_deps = [ "hilog:libhilog", "ipc:ipc_js", "ipc:ipc_single", - "napi:ace_napi", "samgr:samgr_proxy", ] @@ -115,8 +114,16 @@ ohos_shared_library("datashare_consumer") { } ohos_shared_library("datashare_provider") { - include_dirs = - [ "//foundation/distributeddatamgr/kv_store/frameworks/common" ] + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + include_dirs = [ + "${datashare_common_napi_path}/include", + "${kvstore_common_path}", + ] sources = [ "${datashare_native_provider_path}/src/datashare_ext_ability.cpp", @@ -131,7 +138,10 @@ ohos_shared_library("datashare_provider") { public_configs = [ ":datashare_public_config" ] version_script = "provider/libdatashare_provider.map" innerapi_tags = [ "platformsdk" ] - deps = [ "${datashare_innerapi_path}/common:datashare_common" ] + deps = [ + "${datashare_innerapi_path}/common:datashare_common", + "${datashare_napi_path}/dataShare:datashare_jscommon", + ] external_deps = [ "ability_base:want", diff --git a/data_share/interfaces/inner_api/common/BUILD.gn b/data_share/interfaces/inner_api/common/BUILD.gn index e72fd80b..f68ad798 100644 --- a/data_share/interfaces/inner_api/common/BUILD.gn +++ b/data_share/interfaces/inner_api/common/BUILD.gn @@ -31,22 +31,15 @@ config("datashare_public_config") { } datashare_common_include_dirs = [ - "${datashare_common_napi_path}/include", "${datashare_common_native_path}/include", "${datashare_base_path}/interfaces/inner_api/common/include", "${datashare_base_path}/interfaces/inner_api/consumer/include", "${datashare_base_path}/interfaces/inner_api/provider/include", "${datashare_native_proxy_path}/include", - "${foundation_path}/communication/ipc/ipc/native/src/napi_common/include", "${kvstore_base_path}/frameworks/common", ] datashare_common_sources = [ - "${datashare_common_napi_path}/src/datashare_error_impl.cpp", - "${datashare_common_napi_path}/src/datashare_js_utils.cpp", - "${datashare_common_napi_path}/src/datashare_predicates_proxy.cpp", - "${datashare_common_napi_path}/src/datashare_result_set_proxy.cpp", - "${datashare_common_napi_path}/src/napi_datashare_values_bucket.cpp", "${datashare_common_native_path}/src/datashare_abs_result_set.cpp", "${datashare_common_native_path}/src/datashare_block_writer_impl.cpp", "${datashare_common_native_path}/src/datashare_itypes_utils.cpp", @@ -66,9 +59,7 @@ datashare_common_external_deps = [ "hisysevent:libhisysevent", "hitrace:hitrace_meter", "hitrace:libhitracechain", - "ipc:ipc_napi_common", "ipc:ipc_single", - "napi:ace_napi", ] ohos_shared_library("datashare_common") { diff --git a/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h b/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h index f1818102..b7fa3479 100644 --- a/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h +++ b/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h @@ -26,9 +26,7 @@ namespace OHOS { namespace DataShare { class DataShareAbsPredicates { public: - struct JsProxy { - std::shared_ptr predicates_; - }; + /** * @brief Destructor. */ diff --git a/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h b/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h index 40c8332b..f5735e14 100644 --- a/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h +++ b/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h @@ -21,7 +21,7 @@ namespace OHOS { namespace DataShare { -enum Operation : int32_t { +enum class Operation : int32_t { INSERT = 0, UPDATE, DELETE, diff --git a/data_share/interfaces/inner_api/consumer/include/datashare_helper.h b/data_share/interfaces/inner_api/consumer/include/datashare_helper.h index c4053363..c0da2ed8 100644 --- a/data_share/interfaces/inner_api/consumer/include/datashare_helper.h +++ b/data_share/interfaces/inner_api/consumer/include/datashare_helper.h @@ -403,9 +403,19 @@ public: */ virtual std::vector DisablePubSubs(const std::vector &uris, int64_t subscriberId) = 0; + /** + * @brief Set default switch for silent access. + * @param uri, the uri to disable/enable. + * @param enable, the enable of silent switch. + * @return Returns the error code. + */ + static int SetSilentSwitch(Uri &uri, bool enable); + private: static std::shared_ptr CreateServiceHelper(const std::string &bundleName = ""); - + + static bool IsSilentProxyEnable(const std::string &uri); + static std::shared_ptr CreateExtHelper(Uri &uri, const sptr &token); static std::string TransferUriPrefix(const std::string &originPrefix, const std::string &replacedPrefix, diff --git a/data_share/interfaces/inner_api/provider/include/result_set_bridge.h b/data_share/interfaces/inner_api/provider/include/result_set_bridge.h index 0a9cac34..714295b6 100644 --- a/data_share/interfaces/inner_api/provider/include/result_set_bridge.h +++ b/data_share/interfaces/inner_api/provider/include/result_set_bridge.h @@ -23,10 +23,6 @@ namespace DataShare { // build the bridge between the database's ResultSet and DataShare's ResultSet class ResultSetBridge { public: - class Creator { - public: - virtual std::shared_ptr Create() = 0; - }; class Writer { public: /** diff --git a/data_share/test/js/data_share/BUILD.gn b/data_share/test/js/data_share/BUILD.gn new file mode 100644 index 00000000..24c7c3fd --- /dev/null +++ b/data_share/test/js/data_share/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +#################################group######################################### +group("unittest") { + testonly = true + deps = [] + + deps += [ "unittest/src:unittest" ] +} +############################################################################### diff --git a/data_share/test/js/data_share/unittest/config.json b/data_share/test/js/data_share/unittest/config.json new file mode 100644 index 00000000..865615d2 --- /dev/null +++ b/data_share/test/js/data_share/unittest/config.json @@ -0,0 +1,63 @@ +{ + "app": { + "bundleName": "com.example.myapplication", + "vendor": "example", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5 + } + }, + "deviceConfig": {}, + "module": { + "package": "com.example.myapplication", + "name": ".MyApplication", + "deviceType": [ + "tablet", + "2in1", + "default", + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry" + }, + "abilities": [ + { + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "name": "com.example.myapplication.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "MyApplication", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} diff --git a/data_share/test/js/data_share/unittest/openharmony_sx.p7b b/data_share/test/js/data_share/unittest/openharmony_sx.p7b new file mode 100644 index 0000000000000000000000000000000000000000..9be1e98fa4c0c28ca997ed660112fa16b194f0f5 GIT binary patch literal 3437 zcmcgvX>b$g8MY4FF(5FQyMT=#m||qU)nQ9cId-MBB-<-lvSdq&snM}IENNF>t+bK| zgowuF2vC|SxSZxNN5eHhV%(WPpbeB9Fc3;JDMtzMBv1-XAc2N~c2_tCXW&OCGw6qQ z-s9VS-tT?h=bI0tMS+~WDXqHJyCPmLzdbE-fV8Nd&*MRZfG8(#POFZG3xs@Lb{0ry z=R8j3wWo!5g=yjKx#BoZMFS)uA)H}cTp@-^K`9VV?RC3J59@}eik*>n|pRKOLZ zxdn7G!Yv@9O#y<&eUy{)vMXb;fQR)ffVAADQsEMXm;IBMDLfLD0w^U;6%HVo-0Q_5 zCHEa?DBuauNpZzoF+tK27w#n~?u%toS-DhR4k@Q*{7x^8Q=D6&kd^_~J#VVG2LXkL zaAy=}U*?Jto)9hx5MGjdp9hcQAu@tfk_;l!PeyxPY<8b&+&D!CyaBh9=8BSVKLpk4 z4Ml3yY|&Th)vyK4cpC{!uU8v2YBlVV`d~(nz&<@{G1oe*DHub1z7~J5*;s2bX<)_* zV_GbsPQg`(&rpxRb_*Od7}++3+liSw-$!1 zs5*g}EHWhI3i|!-FcfzYL0`SL-rq>LENC;PMl)G(0(1U2%Va|smp0UFx0xd@soZA* zD5LYc4OlbE7@ARt#h}rr3>K@bf%B#^-c+xz8Hr)0D5ExIFltezN@Hn8>o5d~bSfYtkc+_Z&kI#-N5_GhCg*V-^TSO=!G~ z(fXy{n2XV+k}6w_W`dTOP2a4u0ly;ANZ>4OxSKAzFB!yBzdo`gX zO?o|H@WiAw$y6l?=^3jA_Hy0S)nTYs12;4hKE&ekQ|>?|ZLJ}#F`2BczC7kdE4@xV zZBD_)Otwjhz+NSaz?d45!;FsGSu-#qh#hStD%B}f!mCT!KqzSo>I`NGH_9Dea$1Qi zg29Ydt!~lQVR99_T7#Hije~(12drl-P)SV?QR*9sus`8th-8^OQ7@xI$(Yp|^;bL1 zR50O$mDXw6P>i7B(TJ)ciPzTE>XY%X6HAa)b#OBRXv&~%Bw|J#Y><i4=e%95bjtw|cJp=#P#Pf#*luqI_wR;fISDCJhAqSG6R%xItn%~QtZ@m%&u zjGGLX;t6Ls62eQvNmf@v+}J%54^CygxRZ`?8X#r|wkev7(s;Ou4T#y1XNNf)h;o7z z8a^Lfq<1uH`E{G9E z*(=)Css_LSk=>E9jr)s5^2-!+MN=Ds}>1hRma4`uCIz9%p3O77839E{xf z4c_I?**|1`K2tg4!Hvyrou4BsJQuv*UfF)<%CelYIS>D^o?X)3+MK%la6kooW8&G@BU)Y0hT`+mOm$Z_%rB=a%o>I z!2c6lHyKQN)VjiFwa!eE^p8jc$sy$vB+8i25lI~6KPFFh$!o$avA~rj#L6xvR|Z83 z*WD6T9e+5Pyy=F+)pNTf{ny3cy>7Rkd3o*TS?TZJ`NS^NF2%HMkyS{?uJ$`!P4_L^ z1`NFDUbNyg_qREifgktnp1_v{Jbb`7m}2PTyUdOmtJj~m z9bB=ecw4_^rw1IW=of+>nrW5=d3k`3qHCxsIN_F{T1A545};;+fsyC&qChi+YV zr~M63H8ZLCPYmsjY>ls9cL%I)F|JIW-#+48$+lD4k*(P*kDM%zx_fvu4u5ZYUnI}5 zdrycFq>xFU)&X3p@pP2u%$o}}YcRn(MhJ&B2o?KS@cIVz>Ye%o^xV?CB{_Qhu z;}_q1bvO^g{8<3!gYbo4Di{8qzV+(9 zdlmksohQmRTs@qB;(Wo?dER_ux6XQb@q$tQPW?CMu6GVQd;R=iR;-S{Kr%Zks7>b1 zNs{|-+jhObYE}NR&`TGGr^h^4bjh%c>R#@=8nM&Md>_a+zVulsl;){flFekV1t9ob z+SqfV_Pv3$2f)bQ8%Ul2>fdYR^1zs0BQF~olsOj5AodC&Q_7SMFzsz2 z9newxE&jodk~tNHwl%LBMMDbrk=(^b literal 0 HcmV?d00001 diff --git a/data_share/test/js/data_share/unittest/src/BUILD.gn b/data_share/test/js/data_share/unittest/src/BUILD.gn new file mode 100644 index 00000000..2da1e9e6 --- /dev/null +++ b/data_share/test/js/data_share/unittest/src/BUILD.gn @@ -0,0 +1,29 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +module_output_path = "data_share/data_share" + +ohos_js_unittest("DataShareSilentAccessJsTest") { + module_out_path = module_output_path + + hap_profile = "../config.json" + + certificate_profile = "../openharmony_sx.p7b" +} + +group("unittest") { + testonly = true + deps = [ ":DataShareSilentAccessJsTest" ] +} diff --git a/data_share/test/js/data_share/unittest/src/DataShareSilentAccessJsunit.test.js b/data_share/test/js/data_share/unittest/src/DataShareSilentAccessJsunit.test.js new file mode 100644 index 00000000..58b249e4 --- /dev/null +++ b/data_share/test/js/data_share/unittest/src/DataShareSilentAccessJsunit.test.js @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' +import ability_featureAbility from '@ohos.ability.featureAbility' +import dataShare from '@ohos.data.dataShare' +var context = ability_featureAbility.getContext() + +const TAG = "[DATA_SHARE_JSKITS_TEST]" +let uri = ("datashare://com.acts.datasharetest/entry/DB00/TBL00?Proxy=true"); + +describe('dataShareTest', function () { + beforeAll(async function () { + console.info(TAG + 'beforeAll') + }) + + beforeEach(function () { + console.info(TAG + 'beforeEach') + }) + + afterEach(async function () { + console.info(TAG + 'afterEach') + }) + + afterAll(async function () { + console.info(TAG + 'afterAll') + }) + + console.log(TAG + "*************Unit Test Begin*************"); + + /** + * @tc.number testSilentAccess0001 + * @tc.name Normal test case of enableSilentProxy, test enable silent proxy; + * @tc.desc Execute enableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0001', 0, async function () { + console.log(TAG + "************* testSilentAccess0001 start *************"); + try { + await dataShare.enableSilentProxy(context, uri); + console.log(TAG + "enableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0001 end *************"); + }) + + /** + * @tc.number testSilentAccess0002 + * @tc.name Normal test case of enableSilentProxy, test enable silent proxy, uri is null; + * @tc.desc Execute enableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0002', 0, async function () { + console.log(TAG + "************* testSilentAccess0002 start *************"); + try { + await dataShare.enableSilentProxy(context, ""); + console.log(TAG + "enableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0002 end *************"); + }) + + /** + * @tc.number testSilentAccess0003 + * @tc.name Normal test case of disableSilentProxy, test disable silent proxy; + * @tc.desc Execute disableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0003', 0, async function () { + console.log(TAG + "************* testSilentAccess0003 start *************"); + try { + await dataShare.disableSilentProxy(context, uri); + console.log(TAG + "disableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0003 end *************"); + }) + + /** + * @tc.number testSilentAccess0004 + * @tc.name Normal test case of disableSilentProxy, test disable silent proxy, uri is null; + * @tc.desc Execute disableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0004', 0, async function () { + console.log(TAG + "************* testSilentAccess0004 start *************"); + try { + await dataShare.disableSilentProxy(context, ""); + console.log(TAG + "disableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0004 end *************"); + }) + + console.log(TAG + "*************Unit Test End*************"); +}) \ No newline at end of file diff --git a/data_share/test/native/BUILD.gn b/data_share/test/native/BUILD.gn index 53b5c8d7..081f07a8 100644 --- a/data_share/test/native/BUILD.gn +++ b/data_share/test/native/BUILD.gn @@ -26,6 +26,7 @@ group("unittest") { ":NativeDataShareTest", ":ProxyDatasTest", ":SlientAccessTest", + ":SlientSwitchTest", "resource/datashare_ext_bundle:datashare_ext", "resource/datashareproxy_bundle/proxydatas_with_permission:proxydatas_with_permission", "resource/errorcode_ext_bundle:errorcode_ext", @@ -116,6 +117,33 @@ ohos_unittest("SlientAccessTest") { ] } +ohos_unittest("SlientSwitchTest") { + module_out_path = "data_share/native_datashare" + + sources = [ "./unittest/mediadatashare_test/src/slientswitch_test.cpp" ] + + deps = [ + "${datashare_innerapi_path}:datashare_consumer", + "${datashare_innerapi_path}/common:datashare_common", + ] + + external_deps = [ + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_manager", + "ability_runtime:abilitykit_native", + "access_token:libaccesstoken_sdk", + "access_token:libnativetoken", + "access_token:libtoken_setproc", + "c_utils:utils", + "common_event_service:cesfwk_innerkits", + "hilog:libhilog", + "ipc:ipc_single", + "safwk:system_ability_fwk", + "samgr:samgr_proxy", + ] +} + ohos_unittest("ErrorCodeTest") { module_out_path = "data_share/native_datashare" diff --git a/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts b/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts index 49f49627..888502b0 100644 --- a/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts +++ b/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts @@ -30,142 +30,142 @@ let rdbStore; export default class extends Extension { async onCreate(want, callback) { - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate, want:' + want.abilityName); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate, want:' + want.abilityName); console.log("[ttt] [DataShareTest] DataShareExtAbility onCreate this.context.databaseDir:" + this.context.databaseDir); // @ts-ignore rdbStore = await rdb.getRdbStore(this.context, { name: DB_NAME, securityLevel: rdb.SecurityLevel.S1 }); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility getRdbStore done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility getRdbStore done'); await rdbStore.executeSql(DDL_TBL_CREATE, []); await rdbStore.executeSql(DDL_TABLE_USER_SQL, []); await rdbStore.executeSql(DDL_TABLE_BOOK_SQL, []); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility executeSql multiple tables done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility executeSql multiple tables done'); let err = {"code":0}; callback(err); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate end'); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate end'); } async insert(uri, value, callback) { - console.info('[ttt] [DataShareTest] <> [insert] enter'); + console.info('[ttt] [DataShareTest] [insert] enter'); if (value == null) { - console.info('[ttt] [DataShareTest] <> [insert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [insert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + value); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); + console.info('[ttt] [DataShareTest] [insert] value = ' + value); + console.info('[ttt] [DataShareTest] [insert] value = ' + JSON.stringify(value)); await rdbStore.insert(TBL_NAME, value, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [insert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [insert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [insert] leave'); + console.info('[ttt] [DataShareTest] [insert] leave'); } async update(uri, predicates, value, callback) { - console.info('[ttt] [DataShareTest] <> [update] enter'); + console.info('[ttt] [DataShareTest] [update] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [update] invalid predicates'); + console.info('[ttt] [DataShareTest] [update] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [update] values = ' + value); - console.info('[ttt] [DataShareTest] <> [update] values = ' + JSON.stringify(value)); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [update] values = ' + value); + console.info('[ttt] [DataShareTest] [update] values = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [update] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [update] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.update(TBL_NAME,value, predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [update] callback ret:' + ret); - console.info('[ttt] [DataShareTest] <> [update] callback err:' + err); + console.info('[ttt] [DataShareTest] [update] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [update] callback err:' + err); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [update] error' + err); + console.error('[ttt] [DataShareTest] [update] error' + err); } - console.info('[ttt] [DataShareTest] <> [update] leave'); + console.info('[ttt] [DataShareTest] [update] leave'); } async delete(uri, predicates, callback) { - console.info('[ttt] [DataShareTest] <> [delete] enter'); + console.info('[ttt] [DataShareTest] [delete] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [delete] invalid predicates'); + console.info('[ttt] [DataShareTest] [delete] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.delete(TBL_NAME,predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [delete] ret:' + ret); + console.info('[ttt] [DataShareTest] [delete] ret:' + ret); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [delete] error' + err); + console.error('[ttt] [DataShareTest] [delete] error' + err); } - console.info('[ttt] [DataShareTest] <> [delete] leave'); + console.info('[ttt] [DataShareTest] [delete] leave'); } async query(uri, predicates, columns, callback) { - console.info('[ttt] [DataShareTest] <> [query] enter'); + console.info('[ttt] [DataShareTest] [query] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [query] invalid predicates'); + console.info('[ttt] [DataShareTest] [query] invalid predicates'); } - console.info('[ttt] [DataShareTest] <> [query] values = ' + columns); - console.info('[ttt] [DataShareTest] <> [query] values = ' + JSON.stringify(columns)); - console.info('[ttt] [DataShareTest] <> [query] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [query] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [query] values = ' + columns); + console.info('[ttt] [DataShareTest] [query] values = ' + JSON.stringify(columns)); + console.info('[ttt] [DataShareTest] [query] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [query] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.query(TBL_NAME, predicates, columns, function (err, resultSet) { - console.info('[ttt] [DataShareTest] <> [query] ret: ' + resultSet); + console.info('[ttt] [DataShareTest] [query] ret: ' + resultSet); if (resultSet != undefined) { - console.info('[ttt] [DataShareTest] <> [query] resultSet.rowCount: ' + resultSet.rowCount); + console.info('[ttt] [DataShareTest] [query] resultSet.rowCount: ' + resultSet.rowCount); } if (callback != undefined) { callback(err, resultSet); } }); } catch (err) { - console.error(`[ttt] [DataShareTest] <> [query] error: code: ${err.code}, message: ${err.message} `); + console.error(`[ttt] [DataShareTest] [query] error: code: ${err.code}, message: ${err.message} `); callback(err, undefined); } - console.info('[ttt] [DataShareTest] <> [query] leave'); + console.info('[ttt] [DataShareTest] [query] leave'); } async batchInsert(uri: string, valueBuckets, callback) { - console.info('[ttt] [DataShareTest] <> [batchInsert] enter'); + console.info('[ttt] [DataShareTest] [batchInsert] enter'); if (valueBuckets == null || valueBuckets.length == undefined) { - console.info('[ttt] [DataShareTest] <> [batchInsert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [batchInsert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [batchInsert] valueBuckets.length:' + valueBuckets.length); + console.info('[ttt] [DataShareTest] [batchInsert] valueBuckets.length:' + valueBuckets.length); let resultNum = valueBuckets.length await rdbStore.batchInsert(TBL_NAME, valueBuckets, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [batchInsert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [batchInsert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [batchInsert] leave'); + console.info('[ttt] [DataShareTest] [batchInsert] leave'); } async normalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [normalizeUri] enter'); + console.info('[ttt] [DataShareTest] [normalizeUri] enter'); let ret = "normalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [normalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [normalizeUri] leave, ret:' + ret); } async denormalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [denormalizeUri] enter'); + console.info('[ttt] [DataShareTest] [denormalizeUri] enter'); let ret = "denormalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [denormalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [denormalizeUri] leave, ret:' + ret); } }; \ No newline at end of file diff --git a/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts b/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts index 8fcc30de..705e5d32 100644 --- a/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts +++ b/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts @@ -35,13 +35,13 @@ export default class MainAbility extends Ability { console.log("[ttt] [datashareproxyTest] <> MainAbility onCreate") globalThis.abilityWant = want; globalThis.abilityContext = this.context; - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate, want:' + want.abilityName); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate, want:' + want.abilityName); console.log("[ttt] [DataShareTest] DataShareExtAbility onCreate this.context.databaseDir:" + this.context.databaseDir); rdbStore = await rdb.getRdbStore(this.context, { name: DB_NAME }, 1); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility getRdbStore done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility getRdbStore done'); await rdbStore.executeSql(DDL_TBL_CREATE, []); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility executeSql done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility executeSql done'); } onDestroy() { diff --git a/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts b/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts index c2ea2574..752e909e 100644 --- a/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts +++ b/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts @@ -28,162 +28,162 @@ let rdbStore; export default class extends Extension { async onCreate(want, callback) { - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate, want:' + want.abilityName); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate, want:' + want.abilityName); console.log("[ttt] [DataShareTest] DataShareExtAbility onCreate this.context.databaseDir:" + this.context.databaseDir); // @ts-ignore rdbStore = await rdb.getRdbStore(this.context, { name: DB_NAME, securityLevel: rdb.SecurityLevel.S1 }); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility getRdbStore done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility getRdbStore done'); await rdbStore.executeSql(DDL_TBL_CREATE, []); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility executeSql done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility executeSql done'); let err = {"code":0}; callback(err); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate end'); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate end'); } async getFileTypes(uri: string, mimeTypeFilter: string, callback) { - console.info('[ttt] [DataShareTest] <> [getFileTypes] enter'); + console.info('[ttt] [DataShareTest] [getFileTypes] enter'); let ret = new Array("type01", "type00", "type03"); - console.info('[ttt] [DataShareTest] <> [getFileTypes] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [getFileTypes] leave, ret:' + ret); let err = {"code":0}; await callback(err,ret); return ret; } async openFile(uri: string, mode: string, callback) { - console.info('[ttt] [DataShareTest] <> [openFile] enter'); + console.info('[ttt] [DataShareTest] [openFile] enter'); let ret = 12345; let err = {"code":0}; await callback(err,ret); - console.info('[ttt] [DataShareTest] <> [openFile] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [openFile] leave, ret:' + ret); } async insert(uri, value, callback) { - console.info('[ttt] [DataShareTest] <> [insert] enter'); + console.info('[ttt] [DataShareTest] [insert] enter'); if (value == null) { - console.info('[ttt] [DataShareTest] <> [insert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [insert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + value); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); + console.info('[ttt] [DataShareTest] [insert] value = ' + value); + console.info('[ttt] [DataShareTest] [insert] value = ' + JSON.stringify(value)); await rdbStore.insert(TBL_NAME, value, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [insert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [insert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [insert] leave'); + console.info('[ttt] [DataShareTest] [insert] leave'); } async update(uri, predicates, value, callback) { - console.info('[ttt] [DataShareTest] <> [update] enter'); + console.info('[ttt] [DataShareTest] [update] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [update] invalid predicates'); + console.info('[ttt] [DataShareTest] [update] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [update] values = ' + value); - console.info('[ttt] [DataShareTest] <> [update] values = ' + JSON.stringify(value)); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [update] values = ' + value); + console.info('[ttt] [DataShareTest] [update] values = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [update] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [update] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.update(TBL_NAME,value, predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [update] callback ret:' + ret); - console.info('[ttt] [DataShareTest] <> [update] callback err:' + err); + console.info('[ttt] [DataShareTest] [update] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [update] callback err:' + err); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [update] error' + err); + console.error('[ttt] [DataShareTest] [update] error' + err); } - console.info('[ttt] [DataShareTest] <> [update] leave'); + console.info('[ttt] [DataShareTest] [update] leave'); } async delete(uri, predicates, callback) { - console.info('[ttt] [DataShareTest] <> [delete] enter'); + console.info('[ttt] [DataShareTest] [delete] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [delete] invalid predicates'); + console.info('[ttt] [DataShareTest] [delete] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.delete(TBL_NAME,predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [delete] ret:' + ret); + console.info('[ttt] [DataShareTest] [delete] ret:' + ret); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [delete] error' + err); + console.error('[ttt] [DataShareTest] [delete] error' + err); } - console.info('[ttt] [DataShareTest] <> [delete] leave'); + console.info('[ttt] [DataShareTest] [delete] leave'); } async query(uri, predicates, columns, callback) { if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [query] invalid predicates'); + console.info('[ttt] [DataShareTest] [query] invalid predicates'); } try { - console.info('[ttt] [DataShareTest] <> [query] for errorcode test, sissing parameter: TBL_NAME '); + console.info('[ttt] [DataShareTest] [query] for errorcode test, sissing parameter: TBL_NAME '); await rdbStore.query(columns, function (err, resultSet) { - console.info('[ttt] [DataShareTest] <> [query] ret: ' + resultSet); + console.info('[ttt] [DataShareTest] [query] ret: ' + resultSet); if (resultSet != undefined) { - console.info('[ttt] [DataShareTest] <> [query] resultSet.rowCount: ' + resultSet.rowCount); + console.info('[ttt] [DataShareTest] [query] resultSet.rowCount: ' + resultSet.rowCount); } if (callback != undefined) { callback(err, resultSet); } }); } catch (err) { - console.error(`[ttt] [DataShareTest] <> [query] error: code: ${err.code}, message: ${err.message} `); + console.error(`[ttt] [DataShareTest] [query] error: code: ${err.code}, message: ${err.message} `); callback(err, undefined); } - console.info('[ttt] [DataShareTest] <> [query] leave'); + console.info('[ttt] [DataShareTest] [query] leave'); } async getType(uri: string,callback) { - console.info('[ttt] [DataShareTest] <> [getType] enter'); + console.info('[ttt] [DataShareTest] [getType] enter'); let ret = "image"; - console.info('[ttt] [DataShareTest] <> [getType] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [getType] leave, ret:' + ret); let err = {"code":0}; await callback(err,ret); return ret; } async batchInsert(uri: string, valueBuckets, callback) { - console.info('[ttt] [DataShareTest] <> [batchInsert] enter'); + console.info('[ttt] [DataShareTest] [batchInsert] enter'); if (valueBuckets == null || valueBuckets.length == undefined) { - console.info('[ttt] [DataShareTest] <> [batchInsert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [batchInsert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [batchInsert] valueBuckets.length:' + valueBuckets.length); + console.info('[ttt] [DataShareTest] [batchInsert] valueBuckets.length:' + valueBuckets.length); let resultNum = valueBuckets.length await rdbStore.batchinsert(TBL_NAME, valueBuckets, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [batchInsert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [batchInsert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [batchInsert] leave'); + console.info('[ttt] [DataShareTest] [batchInsert] leave'); } async normalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [normalizeUri] enter'); + console.info('[ttt] [DataShareTest] [normalizeUri] enter'); let ret = "normalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [normalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [normalizeUri] leave, ret:' + ret); } async denormalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [denormalizeUri] enter'); + console.info('[ttt] [DataShareTest] [denormalizeUri] enter'); let ret = "denormalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [denormalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [denormalizeUri] leave, ret:' + ret); } }; \ No newline at end of file diff --git a/data_share/test/native/resource/ohos_test/ohos_test.xml b/data_share/test/native/resource/ohos_test/ohos_test.xml index 5ea2d8c6..f2ee66d5 100644 --- a/data_share/test/native/resource/ohos_test/ohos_test.xml +++ b/data_share/test/native/resource/ohos_test/ohos_test.xml @@ -42,6 +42,15 @@