getTable() {
* Execute a statement that returns a 1 by 1 table with a numeric value.
* For example, SELECT COUNT(*) FROM table.
* Please see {@link SQLiteStatement#simpleQueryForLong()}.
+ *
+ * catches a {@link SQLiteDoneException} if result is not found and returns 0. The error can safely be ignored.
*/
@Override
public long count(DatabaseWrapper databaseWrapper) {
@@ -48,7 +51,7 @@ public long count(DatabaseWrapper databaseWrapper) {
return SqlUtils.longForQuery(databaseWrapper, query);
} catch (SQLiteDoneException sde) {
// catch exception here, log it but return 0;
- FlowLog.log(FlowLog.Level.E, sde);
+ FlowLog.log(FlowLog.Level.W, sde);
}
return 0;
}
@@ -74,13 +77,13 @@ public boolean hasData(DatabaseWrapper databaseWrapper) {
}
@Override
- public Cursor query() {
+ public FlowCursor query() {
query(FlowManager.getWritableDatabaseForTable(table));
return null;
}
@Override
- public Cursor query(DatabaseWrapper databaseWrapper) {
+ public FlowCursor query(DatabaseWrapper databaseWrapper) {
if (getPrimaryAction().equals(BaseModel.Action.INSERT)) {
// inserting, let's compile and insert
DatabaseStatement databaseStatement = compileStatement(databaseWrapper);
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/BaseTransformable.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/BaseTransformable.java
index 0e20dee43..1bb0f2b7a 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/BaseTransformable.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/BaseTransformable.java
@@ -1,10 +1,10 @@
package com.raizlabs.android.dbflow.sql.language;
-import android.database.Cursor;
import android.support.annotation.NonNull;
import com.raizlabs.android.dbflow.sql.language.property.IProperty;
import com.raizlabs.android.dbflow.structure.database.DatabaseWrapper;
+import com.raizlabs.android.dbflow.structure.database.FlowCursor;
import java.util.List;
@@ -24,17 +24,17 @@ protected BaseTransformable(Class table) {
}
@NonNull
- public Where where(SQLOperator... conditions) {
+ public Where where(@NonNull SQLOperator... conditions) {
return new Where<>(this, conditions);
}
@Override
- public Cursor query() {
+ public FlowCursor query() {
return where().query();
}
@Override
- public Cursor query(DatabaseWrapper databaseWrapper) {
+ public FlowCursor query(DatabaseWrapper databaseWrapper) {
return where().query(databaseWrapper);
}
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/CursorResult.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/CursorResult.java
index d33f682ea..f53038135 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/CursorResult.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/CursorResult.java
@@ -8,6 +8,7 @@
import com.raizlabs.android.dbflow.list.FlowCursorIterator;
import com.raizlabs.android.dbflow.list.IFlowCursorIterator;
import com.raizlabs.android.dbflow.structure.InstanceAdapter;
+import com.raizlabs.android.dbflow.structure.database.FlowCursor;
import java.util.ArrayList;
import java.util.List;
@@ -21,18 +22,18 @@ public class CursorResult implements IFlowCursorIterator {
private final InstanceAdapter retrievalAdapter;
@Nullable
- private Cursor cursor;
+ private FlowCursor cursor;
@SuppressWarnings("unchecked")
CursorResult(Class modelClass, @Nullable Cursor cursor) {
- this.cursor = cursor;
+ this.cursor = FlowCursor.from(cursor);
retrievalAdapter = FlowManager.getInstanceAdapter(modelClass);
}
/**
* Swaps the current cursor and will close existing one.
*/
- public void swapCursor(@Nullable Cursor cursor) {
+ public void swapCursor(@Nullable FlowCursor cursor) {
if (this.cursor != null) {
if (!this.cursor.isClosed()) {
this.cursor.close();
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Delete.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Delete.java
index 8684a5c83..2e020f03e 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Delete.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Delete.java
@@ -18,7 +18,7 @@ public class Delete implements Query {
* @param The class that implements {@link com.raizlabs.android.dbflow.structure.Model}
*/
public static void table(Class table, SQLOperator... conditions) {
- new Delete().from(table).where(conditions).query();
+ new Delete().from(table).where(conditions).executeUpdateDelete();
}
/**
@@ -48,7 +48,7 @@ public From from(Class table) {
@Override
public String getQuery() {
return new QueryBuilder()
- .append("DELETE")
- .appendSpace().getQuery();
+ .append("DELETE")
+ .appendSpace().getQuery();
}
}
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/OperatorGroup.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/OperatorGroup.java
index c233b2087..7457c105c 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/OperatorGroup.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/OperatorGroup.java
@@ -1,6 +1,7 @@
package com.raizlabs.android.dbflow.sql.language;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import com.raizlabs.android.dbflow.sql.Query;
import com.raizlabs.android.dbflow.sql.QueryBuilder;
@@ -164,10 +165,12 @@ public OperatorGroup orAll(Collection sqlOperators) {
* Appends the {@link SQLOperator} with the specified operator string.
*/
@NonNull
- private OperatorGroup operator(String operator, SQLOperator sqlOperator) {
- setPreviousSeparator(operator);
- conditionsList.add(sqlOperator);
- isChanged = true;
+ private OperatorGroup operator(String operator, @Nullable SQLOperator sqlOperator) {
+ if (sqlOperator != null) {
+ setPreviousSeparator(operator);
+ conditionsList.add(sqlOperator);
+ isChanged = true;
+ }
return this;
}
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Where.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Where.java
index 5b2d02d56..5fd3d11fd 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Where.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/Where.java
@@ -10,6 +10,7 @@
import com.raizlabs.android.dbflow.sql.queriable.ModelQueriable;
import com.raizlabs.android.dbflow.structure.BaseModel;
import com.raizlabs.android.dbflow.structure.database.DatabaseWrapper;
+import com.raizlabs.android.dbflow.structure.database.FlowCursor;
import java.util.ArrayList;
import java.util.Collections;
@@ -207,9 +208,9 @@ public String getQuery() {
* @return the result of the query as a {@link Cursor}.
*/
@Override
- public Cursor query(DatabaseWrapper wrapper) {
+ public FlowCursor query(DatabaseWrapper wrapper) {
// Query the sql here
- Cursor cursor;
+ FlowCursor cursor;
if (whereBase.getQueryBuilderBase() instanceof Select) {
cursor = wrapper.rawQuery(getQuery(), null);
} else {
@@ -220,7 +221,7 @@ public Cursor query(DatabaseWrapper wrapper) {
}
@Override
- public Cursor query() {
+ public FlowCursor query() {
return query(FlowManager.getDatabaseForTable(getTable()).getWritableDatabase());
}
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/IProperty.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/IProperty.java
index e41142514..94e417a31 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/IProperty.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/IProperty.java
@@ -6,6 +6,7 @@
import com.raizlabs.android.dbflow.sql.language.Join;
import com.raizlabs.android.dbflow.sql.language.Method;
import com.raizlabs.android.dbflow.sql.language.NameAlias;
+import com.raizlabs.android.dbflow.sql.language.OrderBy;
import com.raizlabs.android.dbflow.structure.Model;
/**
@@ -117,4 +118,10 @@ public interface IProperty extends Query {
*/
@NonNull
Class> getTable();
+
+ @NonNull
+ OrderBy asc();
+
+ @NonNull
+ OrderBy desc();
}
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/Property.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/Property.java
index 2ae98d26e..9d02fc40f 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/Property.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/language/property/Property.java
@@ -8,6 +8,7 @@
import com.raizlabs.android.dbflow.sql.language.IOperator;
import com.raizlabs.android.dbflow.sql.language.NameAlias;
import com.raizlabs.android.dbflow.sql.language.Operator;
+import com.raizlabs.android.dbflow.sql.language.OrderBy;
import java.util.Collection;
@@ -505,6 +506,19 @@ public Operator rem(T value) {
return getCondition().rem(value);
}
+
+ @Override
+ @NonNull
+ public OrderBy asc() {
+ return OrderBy.fromProperty(this).ascending();
+ }
+
+ @Override
+ @NonNull
+ public OrderBy desc() {
+ return OrderBy.fromProperty(this).descending();
+ }
+
/**
* @return helper method to construct it in a {@link #distinct()} call.
*/
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/migration/UpdateTableMigration.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/migration/UpdateTableMigration.java
index 33be7377a..6aa328552 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/migration/UpdateTableMigration.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/migration/UpdateTableMigration.java
@@ -1,6 +1,7 @@
package com.raizlabs.android.dbflow.sql.migration;
import android.support.annotation.CallSuper;
+import android.support.annotation.Nullable;
import com.raizlabs.android.dbflow.sql.language.BaseQueriable;
import com.raizlabs.android.dbflow.sql.language.OperatorGroup;
@@ -23,11 +24,13 @@ public class UpdateTableMigration extends BaseMigration {
/**
* Builds the conditions for the WHERE part of our query
*/
+ @Nullable
private OperatorGroup whereOperatorGroup;
/**
* The conditions to use to set fields in the update query
*/
+ @Nullable
private OperatorGroup setOperatorGroup;
/**
@@ -78,8 +81,8 @@ public void onPostMigrate() {
public BaseQueriable getUpdateStatement() {
return SQLite.update(table)
- .set(setOperatorGroup)
- .where(whereOperatorGroup);
+ .set(setOperatorGroup)
+ .where(whereOperatorGroup);
}
}
diff --git a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/queriable/CacheableListModelLoader.java b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/queriable/CacheableListModelLoader.java
index ea8ad462a..4c8c96a64 100644
--- a/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/queriable/CacheableListModelLoader.java
+++ b/dbflow/src/main/java/com/raizlabs/android/dbflow/sql/queriable/CacheableListModelLoader.java
@@ -1,12 +1,12 @@
package com.raizlabs.android.dbflow.sql.queriable;
-import android.database.Cursor;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.raizlabs.android.dbflow.annotation.Table;
import com.raizlabs.android.dbflow.structure.ModelAdapter;
import com.raizlabs.android.dbflow.structure.cache.ModelCache;
+import com.raizlabs.android.dbflow.structure.database.FlowCursor;
import java.util.ArrayList;
import java.util.List;
@@ -51,7 +51,7 @@ public ModelAdapter getModelAdapter() {
@NonNull
@SuppressWarnings("unchecked")
@Override
- public List convertToData(@NonNull Cursor cursor, @Nullable List data) {
+ public List convertToData(@NonNull FlowCursor cursor, @Nullable List