From 19a390befe8134c1bca57efb9fe8b9746a503bf0 Mon Sep 17 00:00:00 2001 From: gaojianming108 Date: Mon, 26 Jul 2021 14:55:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8D=8F=E7=A8=8B=E7=9A=84?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dbflow5/transaction/CoroutinesTest.java | 237 ++++-------------- .../FastStoreModelTransactionTest.java | 206 +++++---------- .../FastStoreModelTransaction.java | 20 +- 3 files changed, 107 insertions(+), 356 deletions(-) diff --git a/entry/src/ohosTest/java/com/dbflow5/transaction/CoroutinesTest.java b/entry/src/ohosTest/java/com/dbflow5/transaction/CoroutinesTest.java index 64e2e542..3ce69ace 100644 --- a/entry/src/ohosTest/java/com/dbflow5/transaction/CoroutinesTest.java +++ b/entry/src/ohosTest/java/com/dbflow5/transaction/CoroutinesTest.java @@ -2,18 +2,16 @@ package com.dbflow5.transaction; import com.dbflow5.BaseUnitTest; import com.dbflow5.TestDatabase; -import com.dbflow5.adapter.ModelAdapter; import com.dbflow5.config.FlowManager; -import com.dbflow5.database.DatabaseWrapper; import com.dbflow5.models.SimpleModel_Table; import com.dbflow5.models.SimpleTestModels; import com.dbflow5.models.TwoColumnModel_Table; import com.dbflow5.query.SQLite; -import io.reactivex.rxjava3.core.*; -import io.reactivex.rxjava3.schedulers.Schedulers; +import com.dbflow5.structure.Model; +import ohos.app.dispatcher.TaskDispatcher; +import ohos.app.dispatcher.task.TaskPriority; +import org.junit.Assert; import org.junit.Test; -import org.reactivestreams.Subscriber; -import org.reactivestreams.Subscription; import java.util.List; import java.util.function.Function; @@ -21,212 +19,69 @@ import java.util.function.Function; public class CoroutinesTest extends BaseUnitTest { @Test public void testTransact() { - TestDatabase db = FlowManager.getDatabase(TestDatabase.class); - ModelAdapter modelAdapter = FlowManager.getModelAdapter(SimpleTestModels.SimpleModel.class); - Flowable.create((FlowableOnSubscribe) e -> { + TaskDispatcher globalTaskDispatcher = getContext().getGlobalTaskDispatcher(TaskPriority.DEFAULT); + globalTaskDispatcher.syncDispatch(() -> FlowManager.database(TestDatabase.class, db -> { for (int i = 0; i < 9; i++) { - SimpleTestModels.SimpleModel simpleModel = new SimpleTestModels.SimpleModel("$it"); - modelAdapter.save(simpleModel, db); + SimpleTestModels.SimpleModel simpleModel = new SimpleTestModels.SimpleModel(""+i); + Model.save(SimpleTestModels.SimpleModel.class, simpleModel, db); } - }, BackpressureStrategy.ERROR) - .subscribeOn(Schedulers.newThread()) - .observeOn(Schedulers.newThread()) - .subscribe(new Subscriber() { - @Override - public void onSubscribe(Subscription s) { - s.request(Long.MAX_VALUE); //观察者设置接收事件的数量,如果不设置接收不到事件 - } - - @Override - public void onNext(Integer integer) { - - } - - @Override - public void onError(Throwable t) { + List query = SQLite.select().from(SimpleTestModels.SimpleModel.class).where(SimpleModel_Table.name.eq("5")).queryList(db); + Assert.assertEquals(1, query.size()); - } - - @Override - public void onComplete() { - SQLite.select().from(SimpleTestModels.SimpleModel.class).where(SimpleModel_Table.name.eq("5")); - db.beginTransactionAsync(new Function() { - @Override - public Object apply(DatabaseWrapper databaseWrapper) { - List query = SQLite.select().from(SimpleTestModels.SimpleModel.class).where(SimpleModel_Table.name.eq("5")).queryList(databaseWrapper); - assert (query.size() == 1); - SQLite.update(SimpleTestModels.SimpleModel.class).set(SimpleModel_Table.name.eq("5")).executeUpdateDelete(db); - return null; - } - - @Override - public Function compose(Function before) { - return null; - } - - @Override - public Function andThen(Function after) { - return null; - } - }); - } - }); + long result = SQLite.delete(SimpleTestModels.SimpleModel.class).where(SimpleModel_Table.name.eq("5")).executeUpdateDelete(db); + Assert.assertEquals(1L, result); + return null; + })); } @Test public void testAwaitSaveAndDelete() { - TestDatabase db = FlowManager.getDatabase(TestDatabase.class); - ModelAdapter modelAdapter = FlowManager.getModelAdapter(SimpleTestModels.SimpleModel.class); - Flowable.create((FlowableOnSubscribe) e -> { + TaskDispatcher globalTaskDispatcher = getContext().getGlobalTaskDispatcher(TaskPriority.DEFAULT); + globalTaskDispatcher.syncDispatch(() -> FlowManager.database(TestDatabase.class, db -> { SimpleTestModels.SimpleModel simpleModel = new SimpleTestModels.SimpleModel("Name"); - modelAdapter.save(simpleModel, db); - }, BackpressureStrategy.ERROR) - .subscribeOn(Schedulers.newThread()) - .observeOn(Schedulers.newThread()) - .subscribe(new Subscriber() { - @Override - public void onSubscribe(Subscription s) { - s.request(Long.MAX_VALUE); //观察者设置接收事件的数量,如果不设置接收不到事件 - } - - @Override - public void onNext(Integer integer) { - - } - - @Override - public void onError(Throwable t) { + boolean result = Model.save(SimpleTestModels.SimpleModel.class, simpleModel, db); + assert result; - } - - @Override - public void onComplete() { - db.beginTransactionAsync(new Function() { - @Override - public Object apply(DatabaseWrapper databaseWrapper) { - List result = null; - result = SQLite.select().from(SimpleTestModels.SimpleModel.class).queryList(databaseWrapper); - assert (result.size() == 0); - assert (modelAdapter.delete(SimpleTestModels.SimpleModel.class, db)); - return null; - } - - @Override - public Function compose(Function before) { - return null; - } - - @Override - public Function andThen(Function after) { - return null; - } - }); - } - }); + assert Model.delete(SimpleTestModels.SimpleModel.class, simpleModel, db); + return null; + })); } @Test public void testAwaitInsertAndDelete() { - TestDatabase db = FlowManager.getDatabase(TestDatabase.class); - ModelAdapter modelAdapter = FlowManager.getModelAdapter(SimpleTestModels.SimpleModel.class); - Flowable.create((FlowableOnSubscribe) e -> { - SimpleTestModels.SimpleModel simpleModel = new SimpleTestModels.SimpleModel("Name"); - modelAdapter.insert(simpleModel, db); - }, BackpressureStrategy.ERROR) - .subscribeOn(Schedulers.newThread()) - .observeOn(Schedulers.newThread()) - .subscribe(new Subscriber() { - @Override - public void onSubscribe(Subscription s) { - s.request(Long.MAX_VALUE); //观察者设置接收事件的数量,如果不设置接收不到事件 - } - - @Override - public void onNext(Integer integer) { - - } - - @Override - public void onError(Throwable t) { - - } - - @Override - public void onComplete() { - db.beginTransactionAsync(new Function() { - @Override - public Object apply(DatabaseWrapper databaseWrapper) { - List result; - result = SQLite.select().from(SimpleTestModels.SimpleModel.class).queryList(databaseWrapper); - assert (result.size() > 0); - assert (modelAdapter.delete(SimpleTestModels.SimpleModel.class, db)); - return null; - } - - @Override - public Function compose(Function before) { - return null; - } - - @Override - public Function andThen(Function after) { - return null; - } - }); + TaskDispatcher globalTaskDispatcher = getContext().getGlobalTaskDispatcher(TaskPriority.DEFAULT); + globalTaskDispatcher.syncDispatch(new Runnable() { + @Override + public void run() { + FlowManager.database(TestDatabase.class, new Function() { + @Override + public Void apply(TestDatabase db) { + SimpleTestModels.SimpleModel simpleModel = new SimpleTestModels.SimpleModel("Name"); + long result = Model.insert(SimpleTestModels.SimpleModel.class, simpleModel, db); + assert result > 0; + assert Model.delete(SimpleTestModels.SimpleModel.class, simpleModel, db); + return null; } }); + } + }); } @Test public void testAwaitUpdate() { - TestDatabase db = FlowManager.getDatabase(TestDatabase.class); - ModelAdapter modelAdapter = FlowManager.getModelAdapter(SimpleTestModels.TwoColumnModel.class); - Flowable.create((FlowableOnSubscribe) e -> { + TaskDispatcher globalTaskDispatcher = getContext().getGlobalTaskDispatcher(TaskPriority.DEFAULT); + globalTaskDispatcher.syncDispatch(() -> FlowManager.database(TestDatabase.class, db -> { SimpleTestModels.TwoColumnModel simpleModel = new SimpleTestModels.TwoColumnModel("Name", 5); - modelAdapter.update(simpleModel, db); - }, BackpressureStrategy.ERROR) - .subscribeOn(Schedulers.newThread()) - .observeOn(Schedulers.newThread()) - .subscribe(new Subscriber() { - @Override - public void onSubscribe(Subscription s) { - s.request(Long.MAX_VALUE); //观察者设置接收事件的数量,如果不设置接收不到事件 - } - - @Override - public void onNext(Integer integer) { - - } + boolean result = Model.save(SimpleTestModels.TwoColumnModel.class, simpleModel, db); + assert result; - @Override - public void onError(Throwable t) { + simpleModel.id = 5; + boolean update = Model.update(SimpleTestModels.TwoColumnModel.class, simpleModel, db); + assert update; - } - - @Override - public void onComplete() { - db.beginTransactionAsync(new Function() { - @Override - public Object apply(DatabaseWrapper databaseWrapper) { - List result = null; - result = SQLite.select().from(SimpleTestModels.TwoColumnModel.class).queryList(databaseWrapper); - assert (result.size() == 0); - SimpleTestModels.TwoColumnModel loadedModel = SQLite.select().from(SimpleTestModels.TwoColumnModel.class).where(TwoColumnModel_Table.id.eq(5)).querySingle(databaseWrapper); - assert (loadedModel.id == 5); - return null; - } - - @Override - public Function compose(Function before) { - return null; - } - - @Override - public Function andThen(Function after) { - return null; - } - }); - } - }); + SimpleTestModels.TwoColumnModel loadedModel = SQLite.select().from(SimpleTestModels.TwoColumnModel.class).where(TwoColumnModel_Table.id.eq(5)).querySingle(db); + Assert.assertEquals(loadedModel.id, 5); + return null; + })); } } diff --git a/entry/src/ohosTest/java/com/dbflow5/transaction/FastStoreModelTransactionTest.java b/entry/src/ohosTest/java/com/dbflow5/transaction/FastStoreModelTransactionTest.java index 375c2dbc..c458c166 100644 --- a/entry/src/ohosTest/java/com/dbflow5/transaction/FastStoreModelTransactionTest.java +++ b/entry/src/ohosTest/java/com/dbflow5/transaction/FastStoreModelTransactionTest.java @@ -1,184 +1,92 @@ package com.dbflow5.transaction; import com.dbflow5.TestDatabase; -import com.dbflow5.adapter.ModelAdapter; import com.dbflow5.config.FlowManager; -import com.dbflow5.database.DatabaseWrapper; import com.dbflow5.query.SQLite; import com.dbflow5.BaseUnitTest; import com.dbflow5.models.SimpleTestModels; -import io.reactivex.rxjava3.core.BackpressureStrategy; -import io.reactivex.rxjava3.core.Flowable; -import io.reactivex.rxjava3.core.FlowableOnSubscribe; -import io.reactivex.rxjava3.schedulers.Schedulers; -import org.junit.Assert; +import ohos.app.dispatcher.TaskDispatcher; +import ohos.app.dispatcher.task.TaskPriority; import org.junit.Test; -import org.reactivestreams.Subscriber; -import org.reactivestreams.Subscription; import java.util.ArrayList; import java.util.List; import java.util.Random; -import java.util.function.Function; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; public class FastStoreModelTransactionTest extends BaseUnitTest { @Test public void testSaveBuilder() { - TestDatabase db= FlowManager.getDatabase(TestDatabase.class); - ModelAdapter adapter=FlowManager.getModelAdapter(SimpleTestModels.SimpleModel.class); - Flowable.create((FlowableOnSubscribe) e -> { - for (int i = 0; i < 9; i++) { - SimpleTestModels.SimpleModel simpleModel=new SimpleTestModels.SimpleModel("$it"); - adapter.save(simpleModel,db); + TaskDispatcher globalTaskDispatcher = getContext().getGlobalTaskDispatcher(TaskPriority.DEFAULT); + globalTaskDispatcher.syncDispatch(() -> FlowManager.database(TestDatabase.class, db -> { + List models = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + SimpleTestModels.SimpleModel simpleModel = new SimpleTestModels.SimpleModel(""+i); + models.add(simpleModel); } - }, BackpressureStrategy.ERROR) - .subscribeOn(Schedulers.newThread()) - .observeOn(Schedulers.newThread()) - .subscribe(new Subscriber() { - @Override - public void onSubscribe(Subscription s) { - s.request(Long.MAX_VALUE); //观察者设置接收事件的数量,如果不设置接收不到事件 - } - @Override - public void onNext(Integer integer) { - - } - @Override - public void onError(Throwable t) { - - } - @Override - public void onComplete() { - db.beginTransactionAsync(new Function() { - @Override - public Object apply(DatabaseWrapper databaseWrapper) { - Listresult= SQLite.select().from(SimpleTestModels.SimpleModel.class).queryList(databaseWrapper); - assertEquals(10, result.size()); - assertEquals(10L, result); - return null; - } - - @Override - public Function compose(Function before) { - return null; - } - - @Override - public Function andThen(Function after) { - return null; - } - }); - } - }); + Transaction transaction = db.beginTransactionAsync(FastStoreModelTransaction.fastSave(SimpleTestModels.SimpleModel.class, models).build()).success((longTransaction, aLong) -> { + assertEquals(10L, aLong.longValue()); + return null; + }).error((longTransaction, throwable) -> null).build(); + transaction.execute(); + + List list = SQLite.select().from(SimpleTestModels.SimpleModel.class).queryList(db); + assertEquals(10, list.size()); + return null; + })); } @Test public void testInsertBuilder() { - TestDatabase db= FlowManager.getDatabase(TestDatabase.class); - ModelAdapter adapter=FlowManager.getModelAdapter(SimpleTestModels.SimpleModel.class); - Flowable.create((FlowableOnSubscribe) e -> { - for (int i = 0; i < 9; i++) { - SimpleTestModels.SimpleModel simpleModel=new SimpleTestModels.SimpleModel("$it"); - adapter.insert(simpleModel,db); + TaskDispatcher globalTaskDispatcher = getContext().getGlobalTaskDispatcher(TaskPriority.DEFAULT); + globalTaskDispatcher.syncDispatch(() -> FlowManager.database(TestDatabase.class, db -> { + List models = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + SimpleTestModels.SimpleModel simpleModel = new SimpleTestModels.SimpleModel(""+i); + models.add(simpleModel); } - }, BackpressureStrategy.ERROR) - .subscribeOn(Schedulers.newThread()) - .observeOn(Schedulers.newThread()) - .subscribe(new Subscriber() { - @Override - public void onSubscribe(Subscription s) { - s.request(Long.MAX_VALUE); //观察者设置接收事件的数量,如果不设置接收不到事件 - } - @Override - public void onNext(Integer integer) { - - } - @Override - public void onError(Throwable t) { - - } - @Override - public void onComplete() { - db.beginTransactionAsync(new Function() { - @Override - public Object apply(DatabaseWrapper databaseWrapper) { - Listlist= SQLite.select().from(SimpleTestModels.SimpleModel.class).queryList(databaseWrapper); - assertEquals(10, list.size()); - assertEquals(10L, list); - return null; - } - - @Override - public Function compose(Function before) { - return null; - } - - @Override - public Function andThen(Function after) { - return null; - } - }); - } - }); - + Transaction transaction = db.beginTransactionAsync(FastStoreModelTransaction.fastInsert(SimpleTestModels.SimpleModel.class, models).build()).success((longTransaction, aLong) -> { + assertEquals(10L, aLong.longValue()); + return null; + }).error((longTransaction, throwable) -> null).build(); + transaction.execute(); + + List list = SQLite.select().from(SimpleTestModels.SimpleModel.class).queryList(db); + assertEquals(10, list.size()); + return null; + })); } @Test public void testUpdateBuilder() { - TestDatabase db= FlowManager.getDatabase(TestDatabase.class); - ModelAdapter adapter=FlowManager.getModelAdapter(SimpleTestModels.TwoColumnModel.class); - List oldList=new ArrayList<>(); - Flowable.create((FlowableOnSubscribe) e -> { - for (int i = 0; i < 9; i++) { - Random random=new Random(); - SimpleTestModels.TwoColumnModel twoColumnModel=new SimpleTestModels.TwoColumnModel("$it",random.nextInt()); + TaskDispatcher globalTaskDispatcher = getContext().getGlobalTaskDispatcher(TaskPriority.DEFAULT); + globalTaskDispatcher.syncDispatch(() -> FlowManager.database(TestDatabase.class, db -> { + List oldList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + SimpleTestModels.TwoColumnModel twoColumnModel=new SimpleTestModels.TwoColumnModel(""+i, new Random().nextInt()); oldList.add(twoColumnModel); - adapter.update(twoColumnModel,db); } - }, BackpressureStrategy.ERROR) - .subscribeOn(Schedulers.newThread()) - .observeOn(Schedulers.newThread()) - .subscribe(new Subscriber() { - @Override - public void onSubscribe(Subscription s) { - s.request(Long.MAX_VALUE); //观察者设置接收事件的数量,如果不设置接收不到事件 - } - @Override - public void onNext(Integer integer) { + Transaction transaction = db.beginTransactionAsync(FastStoreModelTransaction.fastInsert(SimpleTestModels.TwoColumnModel.class, oldList).build()).build(); + transaction.execute(); - } - @Override - public void onError(Throwable t) { - - } - @Override - public void onComplete() { - db.beginTransactionAsync(new Function() { - @Override - public Object apply(DatabaseWrapper databaseWrapper) { - Listlist=SQLite.select().from(SimpleTestModels.TwoColumnModel.class).queryList(databaseWrapper); - assertEquals(10, list.size()); - if(list.size()>0){ - for (int i = 0; i models = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + SimpleTestModels.TwoColumnModel twoColumnModel=new SimpleTestModels.TwoColumnModel(""+i, new Random().nextInt()); + models.add(twoColumnModel); + } + Transaction transaction2 = db.beginTransactionAsync(FastStoreModelTransaction.fastUpdate(SimpleTestModels.TwoColumnModel.class, models).build()).build(); + transaction2.execute(); - @Override - public Function compose(Function before) { - return null; - } + List list = SQLite.select().from(SimpleTestModels.TwoColumnModel.class).queryList(db); + assertEquals(10, list.size()); - @Override - public Function andThen(Function after) { - return null; - } - }); - } - }); + for(int index =0;index implements ITransaction { } public static Builder saveBuilder(InternalAdapter internalAdapter) { - return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> { - adapter.saveAll(tModels, wrapper); - return null; - }); + return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> adapter.saveAll(tModels, wrapper)); } public static Builder insertBuilder(InternalAdapter internalAdapter) { - return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> { - adapter.insertAll(tModels, wrapper); - return null; - }); + return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> adapter.insertAll(tModels, wrapper)); } public static Builder updateBuilder(InternalAdapter internalAdapter) { - return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> { - adapter.updateAll(tModels, wrapper); - return null; - }); + return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> adapter.updateAll(tModels, wrapper)); } public static Builder deleteBuilder(InternalAdapter internalAdapter) { - return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> { - adapter.deleteAll(tModels, wrapper); - return null; - }); + return new Builder<>(internalAdapter, (tModels, adapter, wrapper) -> adapter.deleteAll(tModels, wrapper)); } public static FastStoreModelTransaction.Builder fastSave(Class clazz, Collection collection) { -- Gitee