From 23b7263f095439c34b837f3063c5eeb2badb061c Mon Sep 17 00:00:00 2001 From: lazedo Date: Fri, 2 Dec 2016 23:17:17 +0000 Subject: [PATCH] qf-import import database (#2858) * qf-import import database not suitable for large databases * qf-import make fmt * qf-import more fmt --- core/kazoo_couch/src/kazoo_couch.erl | 5 +++++ core/kazoo_couch/src/kz_couch_db.erl | 21 +++++++++++++++++++++ core/kazoo_data/src/kz_datamgr.erl | 4 ++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/core/kazoo_couch/src/kazoo_couch.erl b/core/kazoo_couch/src/kazoo_couch.erl index 26a159a0f1e..10e0cbf54af 100644 --- a/core/kazoo_couch/src/kazoo_couch.erl +++ b/core/kazoo_couch/src/kazoo_couch.erl @@ -23,6 +23,7 @@ ,db_info/1, db_info/2 ,db_exists/2 ,db_archive/3 + ,db_import/3 ,db_list/2 ]). @@ -110,6 +111,10 @@ db_exists(Server, DbName) -> db_archive(Server, DbName, Filename) -> kz_couch_db:db_archive(Server, DbName, Filename). +-spec db_import(kz_data:connection(), ne_binary(), ne_binary()) -> any(). +db_import(Server, DbName, Filename) -> + kz_couch_db:db_import(Server, DbName, Filename). + -spec db_list(kz_data:connection(), kz_data:options()) -> any(). db_list(Server, Options) -> db_list(version(Server), Server, Options). diff --git a/core/kazoo_couch/src/kz_couch_db.erl b/core/kazoo_couch/src/kz_couch_db.erl index 57974470b71..636147b4161 100644 --- a/core/kazoo_couch/src/kz_couch_db.erl +++ b/core/kazoo_couch/src/kz_couch_db.erl @@ -20,6 +20,7 @@ ,db_info/2 ,db_exists/2 ,db_archive/3 + ,db_import/3 ,db_list/2 ]). @@ -163,6 +164,26 @@ archive_docs(File, [Doc|Docs]) -> 'ok' = file:write(File, [kz_json:encode(Doc), $,, $\n]), archive_docs(File, Docs). +-spec db_import(server(), ne_binary(), ne_binary()) -> + 'ok' | + couchbeam_error(). +db_import(#server{}=Conn, DbName, Filename) -> + case file:read_file(Filename) of + {'ok', Text} -> do_db_import(Conn, DbName, kz_json:decode(Text)); + Error -> Error + end. + +-spec do_db_import(server(), ne_binary(), kz_json:objects()) -> + 'ok' | + couchbeam_error(). +do_db_import(#server{}=Conn, DbName, Docs) -> + JObjs0 = [kz_json:delete_keys([<<"_rev">>, <<"_attachments">>], kz_json:get_value(<<"doc">>, Doc)) || Doc <- Docs], + JObjs = [JObj || JObj <- JObjs0, filter_views(kz_json:get_value(<<"_id">>, JObj))], + kz_couch_doc:save_docs(Conn, DbName, JObjs, []). + +filter_views(<<"_design", _/binary>>) -> 'false'; +filter_views(_Id) -> true. + %% Internal DB-related functions ----------------------------------------------- -spec do_db_compact(db()) -> boolean(). diff --git a/core/kazoo_data/src/kz_datamgr.erl b/core/kazoo_data/src/kz_datamgr.erl index e83d5acb541..5432a2ebad1 100644 --- a/core/kazoo_data/src/kz_datamgr.erl +++ b/core/kazoo_data/src/kz_datamgr.erl @@ -522,10 +522,10 @@ db_archive(DbName, Filename) -> -spec db_import(ne_binary(), file:filename_all()) -> 'ok' | data_error(). db_import(DbName, ArchiveFile) when ?VALID_DBNAME -> - kzs_db:db_archive(kzs_plan:plan(DbName), DbName, ArchiveFile); + kzs_db:db_import(kzs_plan:plan(DbName), DbName, ArchiveFile); db_import(DbName, ArchiveFile) -> case maybe_convert_dbname(DbName) of - {'ok', Db} -> db_archive(Db, ArchiveFile); + {'ok', Db} -> db_import(Db, ArchiveFile); {'error', _}=E -> E end.