Skip to content

Commit

Permalink
@emir-hasanbegovic added ability to upgrade each Content individually…
Browse files Browse the repository at this point in the history
… without triggering a full database upgrade
  • Loading branch information
emir-hasanbegovic committed Jun 8, 2014
1 parent dc5a889 commit 9ff46ab
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 19 deletions.
4 changes: 2 additions & 2 deletions README.md
Expand Up @@ -26,15 +26,15 @@ Include the Parchment library in your pom.xml file as follows:
<dependency>
<groupId>liason.mobi</groupId>
<artifactId>task</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>
</dependency>
```

or, to your build.gradle as follows:

```java
dependencies {
compile 'mobi.liason:task:0.0.1'
compile 'mobi.liason:task:0.0.2'
}
```

Expand Down
Expand Up @@ -52,13 +52,18 @@ public static class Columns {
public static final ModelColumn IMAGE_THUMB_URL = new ModelColumn(TABLE_NAME, Product.Fields.IMAGE_THUMB_URL, ModelColumn.Type.text);
public static final ModelColumn IMAGE_URL = new ModelColumn(TABLE_NAME, Product.Fields.IMAGE_URL, ModelColumn.Type.text);
public static final ModelColumn DESCRIPTION = new ModelColumn(TABLE_NAME, Product.Fields.DESCRIPTION, ModelColumn.Type.text);
public static final ModelColumn TASTING_NOTE = new ModelColumn(TABLE_NAME, Product.Fields.TASTING_NOTE, ModelColumn.Type.text);
public static final ModelColumn TASTING_NOTE = new ModelColumn(TABLE_NAME, Product.Fields.TASTING_NOTE + "EEE", ModelColumn.Type.text);
public static final Column[] COLUMNS = new Column[]{ID, NAME, IMAGE_THUMB_URL, IMAGE_URL, DESCRIPTION, TASTING_NOTE};
}

public static class Paths {
public static final Path PRODUCT_TABLE = new Path(TABLE_NAME);
public static final Path PRODUCT_TABLE_INSERT = new Path(TABLE_NAME, "#");
}

@Override
public int getVersion(Context context) {
return 1;
}
}

Expand Up @@ -65,6 +65,9 @@ public static class Paths {
public static final Path PRODUCT_VIEW_MODEL = new Path(VIEW_NAME, "#");
}


@Override
public int getVersion(Context context) {
return 0;
}
}

8 changes: 8 additions & 0 deletions deploy.sh
@@ -0,0 +1,8 @@
#!/bin/sh

set -e

mvn clean deploy -P deploy -f loaders/pom.xml
mvn clean deploy -P deploy -f mvvm/pom.xml
mvn clean deploy -P deploy -f task/pom.xml

11 changes: 6 additions & 5 deletions loaders/src/main/java/mobi/liason/loaders/Content.java
Expand Up @@ -50,12 +50,13 @@ public Uri insert(final Context context, final SQLiteDatabase sqLiteDatabase, fi

final String authority = uri.getAuthority();
final String scheme = uri.getScheme();
Uri.Builder builder = new Uri.Builder().scheme(scheme).authority(authority);
final List<String> pathSegments = path.getPathSegments();
for (final String pathSegment : pathSegments) {
builder = builder.appendPath(pathSegment);

try {
return UriUtilities.getUri(scheme, authority, path, id);
} catch (final Exception exception){
}
final Uri insertUri = builder.build();

final Uri insertUri = UriUtilities.getUri(scheme, authority, path);
return insertUri.buildUpon().appendPath(Long.toString(id)).build();
}

Expand Down
@@ -1,5 +1,6 @@
package mobi.liason.loaders;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
Expand Down Expand Up @@ -59,5 +60,13 @@ public Cursor query(Context context, SQLiteDatabase sqLiteDatabase, Path path, U
final String[] overidenSelectionArguments = {contentName};
return super.query(context, sqLiteDatabase, path, uri, projection, overridenSelection, overidenSelectionArguments, sortOrder);
}


@Override
public Uri insert(Context context, SQLiteDatabase sqLiteDatabase, Path path, Uri uri, ContentValues values) {
final String contentName = uri.getLastPathSegment();
values.put(Columns.NAME, contentName);
return super.insert(context, sqLiteDatabase, path, uri, values);
}
}

45 changes: 36 additions & 9 deletions loaders/src/main/java/mobi/liason/loaders/DatabaseHelper.java
@@ -1,5 +1,6 @@
package mobi.liason.loaders;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
Expand All @@ -22,41 +23,67 @@ public DatabaseHelper(final Context context, final String name, final int versio
mContext = context;
}

@Override
public SQLiteDatabase getWritableDatabase() {
final SQLiteDatabase writableDatabase = super.getWritableDatabase();
return writableDatabase;
}

public abstract List<Content> getContent(final Context context);

@Override
public void onOpen(final SQLiteDatabase sqLiteDatabase) {
if (sqLiteDatabase.isReadOnly()){
return;
}

final ContentVersionTable contentVersionTable = new ContentVersionTable();

final List<Content> contentList = getContent(mContext);
for (final Content content : contentList) {
final int newVersion = content.getVersion(mContext);

if (newVersion == -1) {
content.onUpgrade(mContext, sqLiteDatabase, -1);
} else {
final String contentName = content.getName(mContext);
final Uri uri = UriUtilities.getUri(SCHEME, AUTHORITY, ContentVersionTable.Paths.PATH, contentName);
final String[] projection = {ContentVersionTable.Columns.VERSION};
final Cursor cursor = content.query(mContext, sqLiteDatabase, ContentVersionTable.Paths.PATH, uri, projection, null, null, null);
final String contentName = content.getName(mContext);
final Uri uri = UriUtilities.getUri(SCHEME, AUTHORITY, ContentVersionTable.Paths.PATH, contentName);
final String[] projection = {ContentVersionTable.Columns.VERSION};
final Cursor cursor = contentVersionTable.query(mContext, sqLiteDatabase, ContentVersionTable.Paths.PATH, uri, projection, null, null, null);

if (cursor.moveToFirst()) {
final int versionColumnIndex = cursor.getColumnIndex(ContentVersionTable.Columns.VERSION);
if (versionColumnIndex != -1) {
final int oldVersion = cursor.getInt(versionColumnIndex);
if (newVersion != oldVersion) {
content.onUpgrade(mContext, sqLiteDatabase, oldVersion);

final ContentValues contentValues = new ContentValues();
contentValues.put(ContentVersionTable.Columns.VERSION, newVersion);
final Uri insertUri = contentVersionTable.insert(mContext, sqLiteDatabase, ContentVersionTable.Paths.PATH, uri, contentValues);
}
}
cursor.close();
}
cursor.close();

}
}

@Override
public void onCreate(final SQLiteDatabase sqLiteDatabase) {
final ContentVersionTable contentVersionTable = new ContentVersionTable();
final String contentVersionTableCreate = contentVersionTable.getCreate(mContext);
sqLiteDatabase.execSQL(contentVersionTableCreate);

final List<Content> contentList = getContent(mContext);
contentList.add(new ContentVersionTable());
for (final Content content : contentList) {
final String create = content.getCreate(mContext);
sqLiteDatabase.execSQL(create);

final int newVersion = content.getVersion(mContext);
final String contentName = content.getName(mContext);
final Uri uri = UriUtilities.getUri(SCHEME, AUTHORITY, ContentVersionTable.Paths.PATH, contentName);
final ContentValues contentValues = new ContentValues();
contentValues.put(ContentVersionTable.Columns.VERSION, newVersion);
final Uri insertUri = contentVersionTable.insert(mContext, sqLiteDatabase, ContentVersionTable.Paths.PATH, uri, contentValues);

}
}

Expand Down
Expand Up @@ -10,7 +10,7 @@
public abstract class ViewModel extends Model{

private static final String CREATE = "CREATE VIEW IF NOT EXISTS %s AS SELECT %s FROM %s;";
private static final String DROP = "DROP TABLE IF EXISTS %s;";
private static final String DROP = "DROP VIEW IF EXISTS %s;";
private static final int VERSION = -1;

@Override
Expand Down

0 comments on commit 9ff46ab

Please sign in to comment.