pushtorefresh / storio Goto Github PK
View Code? Open in Web Editor NEWReactive API for SQLiteDatabase and ContentResolver.
License: Apache License 2.0
Reactive API for SQLiteDatabase and ContentResolver.
License: Apache License 2.0
For better readability
Check Observable
support for Non-blocking IO
, should be useful and interesting
Because it's very similar to get()
operation and can confuse user.
One of the variants: just internal()
Use case:
User just want to get count of some query results without managing cursor or wasting memory and time on collection creation and entities parsing
Should provide blocking and observable variants
Support two overloads
bambooStorage.put().objects(@NonNull T... objects)
bambooStorage.put().objects(@NonNull Iterable<T> objects)
Or vice versa.
Personally, I don't like difference:
List<User> users = bambooStorage()
.get()
.query(new QueryBuilder()
.table("users")
.where("email = ?")
.whereArgs("[email protected]")
.build())
.resultAsObjects(User.MAP_FROM_CURSOR) // <-- this
.executeAsBlocking();
Observable<SinglePutResult> observablePutResult = bambooStorage()
.put()
.object(user) // <-- and this
.mapFunc(User.MAP_TO_CONTENT_VALUES)
.putResolver(User.PUT_RESOLVER)
.prepare() // <-- and this
.createObservable();
Via transactions (#41)
Like this:
bambooStorage()
.delete()
.objects(users)
.mapFunc(User.MAP_TO_DELETE_QUERY)
.inTransaction(true)
.prepare()
.createObservable();
get().asCursor()
-> get().cursor()
get().asListOfObjects()
-> get().listOfObjects()
"@ContentPathForContentResolver" annotation can be used for this
Currently it used just for NonNull and Nullable annotations, so maybe it's better to forget about this annotations and remove support.v4
It should be part of get()
operation, like get().cursor()
or get().listOfObjects()
-> get().numberOfResults()
In fact, it's get().cursor()
with returning cursor.getCount()
and auto closing, but will be better to use COUNT
from SQL for this
All design tests for operations should be named like this: "operationDesignTest"
There is no JavaDoc at all...
Currently, we need several methods:
areTransactionsSupported()
beginTransaction()
setTransactionSuccessful()
endTransaction()
Just like pure SQLiteDatabase
Will be useful for #40 put(collection)
and delete(collection)
operations
It would be a great feature!
For example, you'll be able to send event about change to the event bus or do a custom post processing of change in ContentProvider
I think it should be part of BambooStorage
, we can provide blocking
and Observable
variants.
bambooStorage().execSql(SQLQuery).prepare()
Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE.
And SQLQuery
+ SQLQueryBuilder
, which will be same as RawQuery
@nikitin-da any comments?
I realised, that current IBambooStorableItem
methods names are not good, so, they will be renamed
Remove putResolver()
Use _id
Prepare Design of API for delete operation
What about request builder instead of tons of methods with overloads
For example, I want to make all queries on Schedulers.io()
and observe them on AndroidSchedulers.mainThread()
It can be done via compose()
operator, here is useful article from @dlew http://blog.danlew.net/2015/03/02/dont-break-the-chain/
Possible syntax:
Transformer<Observable, Observable> transformer = new Transformer<>() {
@Override Observable transform(Observable observable) {
return observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
BambooStorage bambooStorage = new BSSQLiteDatabase.Builder()
.db(sqliteDatabase)
.observableTransformer(transformer)
.build();
Should be nice
With Arrays.asList()
Many developers don't want to deal with ContentProvider
, so, we can add support of direct usage BambooStorage
with SQLiteDatabase
Create common thing for put(object)
and delete(object)
operations
Will be great to use transactions for this
We should provide an option for using observable created for get() operation as reactive stream:
For example:
Observable<List<User>> observableUsers = bambooStorage
.get()
.listOfObjects(User.class)
.withMapFunc(User.MAP_FROM_CURSOR)
.withQuery(Users.QUERY_ALL)
.prepare()
.createObservableStream();
observableUsers.subscribe(new Observer<List<Users>>() {
@Override public void onNext(List<User> users) {
// will be called after each change in users table
}
// ...
});
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.