diff --git a/library/src/main/java/se/emilsjolander/sprinkles/Utils.java b/library/src/main/java/se/emilsjolander/sprinkles/Utils.java index 176e10d..a86c662 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/Utils.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/Utils.java @@ -2,7 +2,6 @@ import android.content.ContentValues; import android.database.Cursor; -import android.database.DatabaseUtils; import android.net.Uri; import java.lang.reflect.Array; @@ -12,6 +11,7 @@ import se.emilsjolander.sprinkles.annotations.Table; import se.emilsjolander.sprinkles.exceptions.NoTableAnnotationException; +import se.emilsjolander.sprinkles.typeserializers.TypeSerializer; class Utils { @@ -98,12 +98,9 @@ static String insertSqlArgs(String sql, Object[] args) { return sql; } for (Object o : args) { - if (o instanceof Number) { - sql = sql.replaceFirst("\\?", o.toString()); - } else { - String escapedString = DatabaseUtils.sqlEscapeString(o.toString()); - sql = sql.replaceFirst("\\?", escapedString); - } + TypeSerializer typeSerializer = Sprinkles.sInstance.getTypeSerializer(o.getClass()); + String sqlObject = typeSerializer.toSql(o); + sql = sql.replaceFirst("\\?", sqlObject); } return sql; } diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/BooleanSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/BooleanSerializer.java index 4325552..1c7fe2e 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/BooleanSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/BooleanSerializer.java @@ -3,9 +3,6 @@ import android.content.ContentValues; import android.database.Cursor; -/** - * Created by emilsjolander on 27/12/13. - */ public class BooleanSerializer implements TypeSerializer { @Override @@ -18,6 +15,11 @@ public void pack(Boolean object, ContentValues cv, String name) { cv.put(name, object ? 1 : 0); } + @Override + public String toSql(Boolean object) { + return object ? "1" : "0"; + } + @Override public SqlType getSqlType() { return SqlType.INTEGER; diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DateSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DateSerializer.java index 8d04baa..cc1c34a 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DateSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DateSerializer.java @@ -5,9 +5,6 @@ import java.util.Date; -/** - * Created by emilsjolander on 27/12/13. - */ public class DateSerializer implements TypeSerializer { @Override @@ -20,6 +17,11 @@ public void pack(Date object, ContentValues cv, String name) { cv.put(name, object.getTime()); } + @Override + public String toSql(Date object) { + return ""+object.getTime(); + } + @Override public SqlType getSqlType() { return SqlType.INTEGER; diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DoubleSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DoubleSerializer.java index 7a0d389..98d8bd8 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DoubleSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/DoubleSerializer.java @@ -3,9 +3,6 @@ import android.content.ContentValues; import android.database.Cursor; -/** - * Created by emilsjolander on 27/12/13. - */ public class DoubleSerializer implements TypeSerializer { @Override @@ -18,6 +15,11 @@ public void pack(Double object, ContentValues cv, String name) { cv.put(name, object); } + @Override + public String toSql(Double object) { + return ""+object; + } + @Override public SqlType getSqlType() { return SqlType.REAL; diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/FloatSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/FloatSerializer.java index 05ac66d..1a35ee5 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/FloatSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/FloatSerializer.java @@ -3,9 +3,6 @@ import android.content.ContentValues; import android.database.Cursor; -/** - * Created by emilsjolander on 27/12/13. - */ public class FloatSerializer implements TypeSerializer { @Override @@ -18,6 +15,11 @@ public void pack(Float object, ContentValues cv, String name) { cv.put(name, object); } + @Override + public String toSql(Float object) { + return ""+object; + } + @Override public SqlType getSqlType() { return SqlType.REAL; diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/IntSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/IntSerializer.java index bc2c6ff..c5ddb75 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/IntSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/IntSerializer.java @@ -3,9 +3,6 @@ import android.content.ContentValues; import android.database.Cursor; -/** - * Created by emilsjolander on 27/12/13. - */ public class IntSerializer implements TypeSerializer { @Override @@ -18,6 +15,11 @@ public void pack(Integer object, ContentValues cv, String name) { cv.put(name, object); } + @Override + public String toSql(Integer object) { + return ""+object; + } + @Override public SqlType getSqlType() { return SqlType.INTEGER; diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/LongSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/LongSerializer.java index e5651bd..f114c55 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/LongSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/LongSerializer.java @@ -3,9 +3,6 @@ import android.content.ContentValues; import android.database.Cursor; -/** - * Created by emilsjolander on 27/12/13. - */ public class LongSerializer implements TypeSerializer { @Override @@ -18,6 +15,11 @@ public void pack(Long object, ContentValues cv, String name) { cv.put(name, object); } + @Override + public String toSql(Long object) { + return ""+object; + } + @Override public SqlType getSqlType() { return SqlType.INTEGER; diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/SqlType.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/SqlType.java index e865c3b..d1b7c8c 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/SqlType.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/SqlType.java @@ -1,8 +1,5 @@ package se.emilsjolander.sprinkles.typeserializers; -/** - * Created by emilsjolander on 27/12/13. - */ public enum SqlType { INTEGER, REAL, diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/StringSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/StringSerializer.java index 84f5e17..e3d4488 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/StringSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/StringSerializer.java @@ -2,10 +2,8 @@ import android.content.ContentValues; import android.database.Cursor; +import android.database.DatabaseUtils; -/** - * Created by emilsjolander on 27/12/13. - */ public class StringSerializer implements TypeSerializer { @Override @@ -18,6 +16,11 @@ public void pack(String object, ContentValues cv, String name) { cv.put(name, object); } + @Override + public String toSql(String object) { + return DatabaseUtils.sqlEscapeString(object); + } + @Override public SqlType getSqlType() { return SqlType.TEXT; diff --git a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/TypeSerializer.java b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/TypeSerializer.java index 27a1f47..5bb3552 100644 --- a/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/TypeSerializer.java +++ b/library/src/main/java/se/emilsjolander/sprinkles/typeserializers/TypeSerializer.java @@ -3,15 +3,14 @@ import android.content.ContentValues; import android.database.Cursor; -/** - * Created by emilsjolander on 27/12/13. - */ public interface TypeSerializer { T unpack(Cursor c, String name); void pack(T object, ContentValues cv, String name); + String toSql(T object); + SqlType getSqlType(); } diff --git a/library/src/test/java/se/emilsjolander/sprinkles/SprinklesTest.java b/library/src/test/java/se/emilsjolander/sprinkles/SprinklesTest.java index 93d423f..299c6ad 100644 --- a/library/src/test/java/se/emilsjolander/sprinkles/SprinklesTest.java +++ b/library/src/test/java/se/emilsjolander/sprinkles/SprinklesTest.java @@ -33,6 +33,11 @@ public void pack(MyObject object, ContentValues cv, String name) { } + @Override + public String toSql(MyObject object) { + return null; + } + @Override public SqlType getSqlType() { return null; diff --git a/library/src/test/java/se/emilsjolander/sprinkles/UtilsTest.java b/library/src/test/java/se/emilsjolander/sprinkles/UtilsTest.java index 45ddf4f..a7b5608 100644 --- a/library/src/test/java/se/emilsjolander/sprinkles/UtilsTest.java +++ b/library/src/test/java/se/emilsjolander/sprinkles/UtilsTest.java @@ -12,6 +12,7 @@ import java.lang.reflect.Field; import java.util.Arrays; +import java.util.Date; import se.emilsjolander.sprinkles.annotations.AutoIncrementPrimaryKey; import se.emilsjolander.sprinkles.annotations.Column; @@ -111,6 +112,13 @@ public void insertSqlArgs() { assertEquals(result, "1 'hej'"); } + @Test + public void insertTypeSerializedSqlArgs() { + Date date = new Date(); + String result = Utils.insertSqlArgs("?", new Object[]{date}); + assertEquals(result, ""+date.getTime()); + } + @Test public void getAllDeclaredFields() { Field[] fields = Utils.getAllDeclaredFields(TestModel.class, Model.class);