Skip to content

Commit

Permalink
Add SQLDelight interaction example (#814)
Browse files Browse the repository at this point in the history
  • Loading branch information
nikitin-da committed Sep 4, 2017
1 parent 2f10dc5 commit c02e1fc
Show file tree
Hide file tree
Showing 21 changed files with 545 additions and 21 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Expand Up @@ -23,6 +23,8 @@ buildscript {
// Automatic releases to Sonatype.
classpath 'io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.8.0'

classpath 'com.squareup.sqldelight:gradle-plugin:0.6.1'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Expand Down
4 changes: 4 additions & 0 deletions storio-sample-app/build.gradle
@@ -1,4 +1,5 @@
apply plugin: 'com.android.application'
apply plugin: 'com.squareup.sqldelight'

android {
compileSdkVersion rootProject.ext.compileSdkVersion
Expand Down Expand Up @@ -68,6 +69,9 @@ dependencies {
compile libraries.recyclerView
compile libraries.timber

provided libraries.autoParcel
annotationProcessor libraries.autoParcelProcessor

debugCompile libraries.leakCanary
releaseCompile libraries.leakCanaryNoOp

Expand Down
4 changes: 4 additions & 0 deletions storio-sample-app/src/main/AndroidManifest.xml
Expand Up @@ -30,6 +30,10 @@
android:name="com.pushtorefresh.storio2.sample.many_to_many_sample.ManyToManyActivity"
android:label="@string/many_to_many" />

<activity
android:name="com.pushtorefresh.storio2.sample.sqldelight.SqlDelightActivity"
android:label="@string/sqldelight" />

<provider
android:name="com.pushtorefresh.storio2.sample.provider.SampleContentProvider"
android:authorities="com.pushtorefresh.storio2.sample_provider"
Expand Down
Expand Up @@ -5,6 +5,7 @@
import com.pushtorefresh.storio2.sample.db.DbModule;
import com.pushtorefresh.storio2.sample.many_to_many_sample.ManyToManyActivity;
import com.pushtorefresh.storio2.sample.provider.SampleContentProvider;
import com.pushtorefresh.storio2.sample.sqldelight.SqlDelightActivity;
import com.pushtorefresh.storio2.sample.ui.fragment.TweetsFragment;
import com.pushtorefresh.storio2.sqlite.StorIOSQLite;

Expand All @@ -25,6 +26,8 @@ public interface AppComponent {

void inject(@NonNull ManyToManyActivity manyToManyActivity);

void inject(@NonNull SqlDelightActivity sqlDelightActivity);

void inject(@NonNull SampleContentProvider sampleContentProvider);

@NonNull
Expand Down
Expand Up @@ -10,6 +10,7 @@
import com.pushtorefresh.storio2.sample.many_to_many_sample.entities.CarTable;
import com.pushtorefresh.storio2.sample.many_to_many_sample.entities.PersonCarRelationTable;
import com.pushtorefresh.storio2.sample.many_to_many_sample.entities.PersonTable;
import com.pushtorefresh.storio2.sample.sqldelight.entities.Customer;

public class DbOpenHelper extends SQLiteOpenHelper {

Expand All @@ -25,6 +26,8 @@ public void onCreate(@NonNull SQLiteDatabase db) {
db.execSQL(CarTable.getCreateTableQuery());
db.execSQL(PersonTable.getCreateTableQuery());
db.execSQL(PersonCarRelationTable.getCreateTableQuery());

db.execSQL(Customer.CREATE_TABLE);
}

@Override
Expand Down
Expand Up @@ -5,6 +5,7 @@
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;

import com.pushtorefresh.storio2.sample.R;
import com.pushtorefresh.storio2.sample.SampleApp;
Expand Down Expand Up @@ -72,7 +73,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
SampleApp.get(this).appComponent().inject(this);
ButterKnife.bind(this);

personsAdapter = new PersonsAdapter(this);
personsAdapter = new PersonsAdapter(LayoutInflater.from(this), this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(personsAdapter);

Expand Down
Expand Up @@ -19,13 +19,17 @@

public class PersonsAdapter extends RecyclerView.Adapter<PersonsAdapter.ViewHolder> {

@NonNull
private final LayoutInflater layoutInflater;

@NonNull
private List<Person> persons = Collections.emptyList();

@NonNull
private final Callbacks callbacks;

public PersonsAdapter(@NonNull Callbacks callbacks) {
public PersonsAdapter(@NonNull LayoutInflater layoutInflater, @NonNull Callbacks callbacks) {
this.layoutInflater = layoutInflater;
this.callbacks = callbacks;
}

Expand All @@ -40,10 +44,10 @@ public int getItemCount() {
}

@Override
public
@NonNull
ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_person, parent, false), callbacks);
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = layoutInflater.inflate(R.layout.list_item_person, parent, false);
return new ViewHolder(itemView, callbacks);
}

@Override
Expand Down
@@ -0,0 +1,70 @@
package com.pushtorefresh.storio2.sample.sqldelight;

import android.annotation.SuppressLint;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.pushtorefresh.storio2.sample.R;
import com.pushtorefresh.storio2.sample.sqldelight.entities.Customer;

import java.util.Collections;
import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;

public class CustomersAdapter extends RecyclerView.Adapter<CustomersAdapter.ViewHolder> {

@NonNull
private final LayoutInflater layoutInflater;

@NonNull
private List<Customer> customers = Collections.emptyList();

public CustomersAdapter(@NonNull LayoutInflater layoutInflater) {
this.layoutInflater = layoutInflater;
}

public void setCustomers(@NonNull List<Customer> customers) {
this.customers = customers;
notifyDataSetChanged();
}

@Override
public int getItemCount() {
return customers.size();
}

@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = layoutInflater.inflate(R.layout.list_item_customer, parent, false);
return new ViewHolder(itemView);
}

@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final Customer customer = customers.get(position);

holder.name.setText(String.format("%s %s", customer.name(), customer.surname()));
holder.city.setText(customer.city());
}

static class ViewHolder extends RecyclerView.ViewHolder {

@Bind(R.id.list_item_customer_name)
TextView name;

@Bind(R.id.list_item_customer_city)
TextView city;

public ViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
@@ -0,0 +1,72 @@
package com.pushtorefresh.storio2.sample.sqldelight;

import android.content.ContentValues;
import android.database.Cursor;
import android.support.annotation.NonNull;

import com.pushtorefresh.storio2.sqlite.StorIOSQLite;
import com.pushtorefresh.storio2.sqlite.operations.put.PutResolver;
import com.pushtorefresh.storio2.sqlite.operations.put.PutResult;
import com.pushtorefresh.storio2.sqlite.queries.InsertQuery;
import com.pushtorefresh.storio2.sqlite.queries.RawQuery;
import com.squareup.sqldelight.RowMapper;
import com.squareup.sqldelight.SqlDelightStatement;

import java.util.ArrayList;
import java.util.List;

import static com.pushtorefresh.storio2.sqlite.operations.put.PutResult.newInsertResult;

public final class SQLUtils {

private SQLUtils() {
}

@NonNull
public static PutResolver<ContentValues> makeSimpleContentValuesInsertPutResolver(@NonNull final String tableName) {
return new PutResolver<ContentValues>() {
@NonNull
final InsertQuery insert = InsertQuery.builder()
.table(tableName)
.build();

@NonNull
@Override
public PutResult performPut(@NonNull StorIOSQLite storIOSQLite, @NonNull ContentValues contentValues) {
final long insertedId = storIOSQLite.lowLevel().insert(insert, contentValues);
return newInsertResult(insertedId, tableName);
}
};
}

@NonNull
public static RawQuery makeReadQuery(@NonNull SqlDelightStatement statement) {
return RawQuery.builder()
.query(statement.statement)
.args(statement.args)
.observesTables(statement.tables)
.build();
}

@NonNull
public static RawQuery makeWriteQuery(@NonNull SqlDelightStatement statement) {
return RawQuery.builder()
.query(statement.statement)
.args(statement.args)
.affectsTables(statement.tables)
.build();
}

@NonNull
public static <T> List<T> mapFromCursor(@NonNull Cursor cursor, @NonNull RowMapper<? extends T> mapper) {
try {
final List<T> result = new ArrayList<T>(cursor.getCount());
while (cursor.moveToNext()) {
result.add(mapper.map(cursor));
}
return result;
} finally {
cursor.close();
}
}
}

0 comments on commit c02e1fc

Please sign in to comment.