public static String[] createIndexDefinition(TableInfo tableInfo) { final ArrayList<String> definitions = new ArrayList<String>(); sIndexGroupMap = new HashMap<String, List<String>>(); for (Field field : tableInfo.getFields()) { createIndexColumnDefinition(tableInfo, field); } if (sIndexGroupMap.isEmpty()) { return new String[0]; } for (Map.Entry<String, List<String>> entry : sIndexGroupMap.entrySet()) { definitions.add(String.format("CREATE INDEX IF NOT EXISTS %s on %s(%s);", "index_" + tableInfo.getTableName() + "_" + entry.getKey(), tableInfo.getTableName(), TextUtils.join(", ", entry.getValue()))); } return definitions.toArray(new String[definitions.size()]); }
public static void createIndexColumnDefinition(TableInfo tableInfo, Field field) { final String name = tableInfo.getColumnName(field); final Column column = field.getAnnotation(Column.class); if (field.getName().equals("mId")) { return; } if (column.index()) { List<String> list = new ArrayList<String>(); list.add(name); sIndexGroupMap.put(name, list); } String[] groups = column.indexGroups(); for (String group : groups) { if (TextUtils.isEmpty(group)) continue; List<String> list = sIndexGroupMap.get(group); if (list == null) { list = new ArrayList<String>(); } list.add(name); sIndexGroupMap.put(group, list); } }
private Field getIdField(Class<?> type) { if (type.equals(Model.class)) { try { return type.getDeclaredField("mId"); } catch (NoSuchFieldException e) { Log.e("Impossible!", e.toString()); } } else if (type.getSuperclass() != null) { return getIdField(type.getSuperclass()); } return null; }
public final void delete() { Cache.openDatabase().delete(mTableInfo.getTableName(), idName+"=?", new String[] { getId().toString() }); Cache.removeEntity(this); Cache.getContext().getContentResolver() .notifyChange(ContentProvider.createUri(mTableInfo.getType(), mId), null); }
final ContentValues values = new ContentValues(); for (Field field : mTableInfo.getFields()) { final String fieldName = mTableInfo.getColumnName(field); Class<?> fieldType = field.getType(); mId = db.insert(mTableInfo.getTableName(), null, values); db.update(mTableInfo.getTableName(), values, idName+"=" + mId, null); .notifyChange(ContentProvider.createUri(mTableInfo.getType(), mId), null); return mId;
final String name = tableInfo.getColumnName(field); final TypeSerializer typeSerializer = Cache.getParserForType(field.getType()); final Column column = field.getAnnotation(Column.class); if (name.equals(tableInfo.getIdName())) { definition.append(" PRIMARY KEY AUTOINCREMENT"); }else if(column!=null){ definition.append(Cache.getTableInfo((Class<? extends Model>) type).getTableName()); definition.append("("+tableInfo.getIdName()+")"); definition.append(" ON DELETE "); definition.append(column.onDelete().toString().replace("_", " "));
@Override public boolean equals(Object obj) { if (obj instanceof Model && this.mId != null) { final Model other = (Model) obj; return this.mId.equals(other.mId) && (this.mTableInfo.getTableName().equals(other.mTableInfo.getTableName())); } else { return this == obj; } }
for (Field field : mTableInfo.getFields()) { final String fieldName = mTableInfo.getColumnName(field); Class<?> fieldType = field.getType(); final int columnIndex = columnsOrdered.indexOf(fieldName);
public Model() { mTableInfo = Cache.getTableInfo(getClass()); idName = mTableInfo.getIdName(); }
@SuppressWarnings("unchecked") Class<? extends Model> modelClass = (Class<? extends Model>) discoveredClass; mTableInfos.put(modelClass, new TableInfo(modelClass));
public static ArrayList<String> createUniqueDefinition(TableInfo tableInfo) { final ArrayList<String> definitions = new ArrayList<String>(); sUniqueGroupMap = new HashMap<String, List<String>>(); sOnUniqueConflictsMap = new HashMap<String, ConflictAction>(); for (Field field : tableInfo.getFields()) { createUniqueColumnDefinition(tableInfo, field); } if (sUniqueGroupMap.isEmpty()) { return definitions; } Set<String> keySet = sUniqueGroupMap.keySet(); for (String key : keySet) { List<String> group = sUniqueGroupMap.get(key); ConflictAction conflictAction = sOnUniqueConflictsMap.get(key); definitions.add(String.format("UNIQUE (%s) ON CONFLICT %s", TextUtils.join(", ", group), conflictAction.toString())); } return definitions; }
final ContentValues values = new ContentValues(); for (Field field : mTableInfo.getFields()) { final String fieldName = mTableInfo.getColumnName(field); Class<?> fieldType = field.getType(); mId = db.insert(mTableInfo.getTableName(), null, values); db.update(mTableInfo.getTableName(), values, idName+"=" + mId, null); .notifyChange(ContentProvider.createUri(mTableInfo.getType(), mId), null); return mId;
final String name = tableInfo.getColumnName(field); final TypeSerializer typeSerializer = Cache.getParserForType(field.getType()); final Column column = field.getAnnotation(Column.class); if (name.equals(tableInfo.getIdName())) { definition.append(" PRIMARY KEY AUTOINCREMENT"); }else if(column!=null){ definition.append(Cache.getTableInfo((Class<? extends Model>) type).getTableName()); definition.append("("+tableInfo.getIdName()+")"); definition.append(" ON DELETE "); definition.append(column.onDelete().toString().replace("_", " "));
@Override public boolean onCreate() { ActiveAndroid.initialize(getConfiguration()); sAuthority = getAuthority(); final List<TableInfo> tableInfos = new ArrayList<TableInfo>(Cache.getTableInfos()); final int size = tableInfos.size(); for (int i = 0; i < size; i++) { final TableInfo tableInfo = tableInfos.get(i); final int tableKey = (i * 2) + 1; final int itemKey = (i * 2) + 2; // content://<authority>/<table> URI_MATCHER.addURI(sAuthority, tableInfo.getTableName().toLowerCase(), tableKey); TYPE_CODES.put(tableKey, tableInfo.getType()); // content://<authority>/<table>/<id> URI_MATCHER.addURI(sAuthority, tableInfo.getTableName().toLowerCase() + "/#", itemKey); TYPE_CODES.put(itemKey, tableInfo.getType()); } return true; }
@Override public boolean equals(Object obj) { if (obj instanceof Model && this.mId != null) { final Model other = (Model) obj; return this.mId.equals(other.mId) && (this.mTableInfo.getTableName().equals(other.mTableInfo.getTableName())); } else { return this == obj; } }
for (Field field : mTableInfo.getFields()) { final String fieldName = mTableInfo.getColumnName(field); Class<?> fieldType = field.getType(); final int columnIndex = columnsOrdered.indexOf(fieldName);
public Model() { mTableInfo = Cache.getTableInfo(getClass()); idName = mTableInfo.getIdName(); }
@SuppressWarnings("unchecked") Class<? extends Model> modelClass = (Class<? extends Model>) discoveredClass; mTableInfos.put(modelClass, new TableInfo(modelClass));
public static ArrayList<String> createUniqueDefinition(TableInfo tableInfo) { final ArrayList<String> definitions = new ArrayList<String>(); sUniqueGroupMap = new HashMap<String, List<String>>(); sOnUniqueConflictsMap = new HashMap<String, ConflictAction>(); for (Field field : tableInfo.getFields()) { createUniqueColumnDefinition(tableInfo, field); } if (sUniqueGroupMap.isEmpty()) { return definitions; } Set<String> keySet = sUniqueGroupMap.keySet(); for (String key : keySet) { List<String> group = sUniqueGroupMap.get(key); ConflictAction conflictAction = sOnUniqueConflictsMap.get(key); definitions.add(String.format("UNIQUE (%s) ON CONFLICT %s", TextUtils.join(", ", group), conflictAction.toString())); } return definitions; }
final ContentValues values = new ContentValues(); for (Field field : mTableInfo.getFields()) { final String fieldName = mTableInfo.getColumnName(field); Class<?> fieldType = field.getType(); mId = db.insert(mTableInfo.getTableName(), null, values); db.update(mTableInfo.getTableName(), values, idName+"=" + mId, null); .notifyChange(ContentProvider.createUri(mTableInfo.getType(), mId), null); return mId;