Closed wind0ws closed 7 years ago
DBFlow Version: 4.0.1 Issue Kind:Bug
Description: When i using 4.0.0-beta7 , It is ok to compile.But change to 4.0.1, it won't work,the generate code says it can't find "adapter" field in insert/save/update/delete method.
Here is my database model.
public ExpStatus() { } @PrimaryKey @Column private String expUID; @NotNull @Column private String expNumber; @NotNull @Column private String expSpellName; @Column private boolean isCheck; @Column private int state; @Column private String expTextName; private List<ExpStatusData> data; @OneToMany(methods = {OneToMany.Method.ALL}, variableName = "data",isVariablePrivate = true) public List<ExpStatusData> getData() { if (data == null /*|| data.isEmpty()*/) { data = SQLite.select() .from(ExpStatusData.class) .where(ExpStatusData_Table.expUID.eq(expUID)) .orderBy(ExpStatusData_Table.time,false) .queryList(); } return data; }
Here is generate code which using DbFlow 4.0.1
/** * This is generated code. Please do not modify */ public final class ExpStatus_Table extends ModelAdapter<ExpStatus> { /** * Primary Key */ public static final Property<String> expUID = new Property<String>(ExpStatus.class, "expUID"); public static final Property<String> expNumber = new Property<String>(ExpStatus.class, "expNumber"); public static final Property<String> expSpellName = new Property<String>(ExpStatus.class, "expSpellName"); public static final Property<Boolean> isCheck = new Property<Boolean>(ExpStatus.class, "isCheck"); public static final Property<Integer> state = new Property<Integer>(ExpStatus.class, "state"); public static final Property<String> expTextName = new Property<String>(ExpStatus.class, "expTextName"); public static final IProperty[] ALL_COLUMN_PROPERTIES = new IProperty[]{expUID,expNumber,expSpellName,isCheck,state,expTextName}; public ExpStatus_Table(DatabaseDefinition databaseDefinition) { super(databaseDefinition); } @Override public final Class<ExpStatus> getModelClass() { return ExpStatus.class; } @Override public final String getTableName() { return "`ExpStatus`"; } @Override public final ExpStatus newInstance() { return new ExpStatus(); } @Override public final ConflictAction getUpdateOnConflictAction() { return ConflictAction.ROLLBACK; } @Override public final ConflictAction getInsertOnConflictAction() { return ConflictAction.ROLLBACK; } @Override public final Property getProperty(String columnName) { columnName = QueryBuilder.quoteIfNeeded(columnName); switch ((columnName)) { case "`expUID`": { return expUID; } case "`expNumber`": { return expNumber; } case "`expSpellName`": { return expSpellName; } case "`isCheck`": { return isCheck; } case "`state`": { return state; } case "`expTextName`": { return expTextName; } default: { throw new IllegalArgumentException("Invalid column name passed. Ensure you are calling the correct table's column"); } } } @Override public final IProperty[] getAllColumnProperties() { return ALL_COLUMN_PROPERTIES; } @Override public final void bindToInsertValues(ContentValues values, ExpStatus model) { values.put("`expUID`", model.getExpUID() != null ? model.getExpUID() : null); values.put("`expNumber`", model.getExpNumber() != null ? model.getExpNumber() : null); values.put("`expSpellName`", model.getExpSpellName() != null ? model.getExpSpellName() : null); values.put("`isCheck`", model.isCheck() ? 1 : 0); values.put("`state`", model.getState()); values.put("`expTextName`", model.getExpTextName() != null ? model.getExpTextName() : null); } @Override public final void bindToInsertStatement(DatabaseStatement statement, ExpStatus model, int start) { statement.bindStringOrNull(1 + start, model.getExpUID()); statement.bindStringOrNull(2 + start, model.getExpNumber()); statement.bindStringOrNull(3 + start, model.getExpSpellName()); statement.bindLong(4 + start, model.isCheck() ? 1 : 0); statement.bindLong(5 + start, model.getState()); statement.bindStringOrNull(6 + start, model.getExpTextName()); } @Override public final String getCompiledStatementQuery() { return "INSERT OR ROLLBACK INTO `ExpStatus`(`expUID`,`expNumber`,`expSpellName`,`isCheck`,`state`,`expTextName`) VALUES (?,?,?,?,?,?)"; } @Override public final String getCreationQuery() { return "CREATE TABLE IF NOT EXISTS `ExpStatus`(`expUID` TEXT, `expNumber` TEXT NOT NULL, `expSpellName` TEXT NOT NULL, `isCheck` INTEGER, `state` INTEGER, `expTextName` TEXT, PRIMARY KEY(`expUID`))"; } @Override public final void loadFromCursor(FlowCursor cursor, ExpStatus model) { model.setExpUID(cursor.getStringOrDefault("expUID")); model.setExpNumber(cursor.getStringOrDefault("expNumber")); model.setExpSpellName(cursor.getStringOrDefault("expSpellName")); int index_isCheck = cursor.getColumnIndex("isCheck"); if (index_isCheck != -1 && !cursor.isNull(index_isCheck)) { model.setCheck(cursor.getBoolean(index_isCheck)); } else { model.setCheck(false); } model.setState(cursor.getIntOrDefault("state")); model.setExpTextName(cursor.getStringOrDefault("expTextName")); model.getData(); } @Override public final boolean exists(ExpStatus model, DatabaseWrapper wrapper) { return SQLite.selectCountOf() .from(ExpStatus.class) .where(getPrimaryConditionClause(model)) .hasData(wrapper); } @Override public final OperatorGroup getPrimaryConditionClause(ExpStatus model) { OperatorGroup clause = OperatorGroup.clause(); clause.and(expUID.eq(model.getExpUID())); return clause; } @Override public final boolean delete(ExpStatus model) { boolean successful = super.delete(model); if (model.getData() != null) { adapter.deleteAll(model.getData()); } model.setData(null); return successful; } @Override public final boolean delete(ExpStatus model, DatabaseWrapper wrapper) { boolean successful = super.delete(model, wrapper); if (model.getData() != null) { adapter.deleteAll(model.getData(), wrapper); } model.setData(null); return successful; } @Override public final boolean save(ExpStatus model) { boolean successful = super.save(model); if (model.getData() != null) { adapter.saveAll(model.getData()); } return successful; } @Override public final long insert(ExpStatus model) { long rowId = super.insert(model); if (model.getData() != null) { adapter.insertAll(model.getData()); } return rowId; } @Override public final boolean update(ExpStatus model) { boolean successful = super.update(model); if (model.getData() != null) { adapter.updateAll(model.getData()); } return successful; } @Override public final boolean save(ExpStatus model, DatabaseWrapper wrapper) { boolean successful = super.save(model, wrapper); if (model.getData() != null) { adapter.saveAll(model.getData(), wrapper); } return successful; } @Override public final long insert(ExpStatus model, DatabaseWrapper wrapper) { long rowId = super.insert(model, wrapper); if (model.getData() != null) { adapter.insertAll(model.getData(), wrapper); } return rowId; } @Override public final boolean update(ExpStatus model, DatabaseWrapper wrapper) { boolean successful = super.update(model, wrapper); if (model.getData() != null) { adapter.updateAll(model.getData(), wrapper); } return successful; } }
As you can see ,in insert/update/delete/save method ,the "adapter" field just appear and don't know come from where.
when i using 4.0.0-beta7,it is ok with generate code: here is generate code by 4.0.0-beta7:
/** * This is generated code. Please do not modify */ public final class ExpStatus_Table extends ModelAdapter<ExpStatus> { /** * Primary Key */ public static final Property<String> expUID = new Property<String>(ExpStatus.class, "expUID"); public static final Property<String> expNumber = new Property<String>(ExpStatus.class, "expNumber"); public static final Property<String> expSpellName = new Property<String>(ExpStatus.class, "expSpellName"); public static final Property<Boolean> isCheck = new Property<Boolean>(ExpStatus.class, "isCheck"); public static final Property<Integer> state = new Property<Integer>(ExpStatus.class, "state"); public static final Property<String> expTextName = new Property<String>(ExpStatus.class, "expTextName"); public static final IProperty[] ALL_COLUMN_PROPERTIES = new IProperty[]{expUID,expNumber,expSpellName,isCheck,state,expTextName}; public ExpStatus_Table(DatabaseHolder holder, DatabaseDefinition databaseDefinition) { super(databaseDefinition); } @Override public final Class<ExpStatus> getModelClass() { return ExpStatus.class; } public final String getTableName() { return "`ExpStatus`"; } @Override public final Property getProperty(String columnName) { columnName = QueryBuilder.quoteIfNeeded(columnName); switch (columnName) { case "`expUID`": { return expUID; } case "`expNumber`": { return expNumber; } case "`expSpellName`": { return expSpellName; } case "`isCheck`": { return isCheck; } case "`state`": { return state; } case "`expTextName`": { return expTextName; } default: { throw new IllegalArgumentException("Invalid column name passed. Ensure you are calling the correct table's column"); } } } public final IProperty[] getAllColumnProperties() { return ALL_COLUMN_PROPERTIES; } @Override public final ExpStatus newInstance() { return new ExpStatus(); } @Override public final ConflictAction getUpdateOnConflictAction() { return ConflictAction.ROLLBACK; } @Override public final ConflictAction getInsertOnConflictAction() { return ConflictAction.ROLLBACK; } @Override public final void bindToInsertValues(ContentValues values, ExpStatus model) { String refexpUID = model.getExpUID(); values.put("`expUID`", refexpUID != null ? refexpUID : null); String refexpNumber = model.getExpNumber(); values.put("`expNumber`", refexpNumber != null ? refexpNumber : null); String refexpSpellName = model.getExpSpellName(); values.put("`expSpellName`", refexpSpellName != null ? refexpSpellName : null); values.put("`isCheck`", model.isCheck() ? 1 : 0); values.put("`state`", model.getState()); String refexpTextName = model.getExpTextName(); values.put("`expTextName`", refexpTextName != null ? refexpTextName : null); } @Override public final void bindToInsertStatement(DatabaseStatement statement, ExpStatus model, int start) { String refexpUID = model.getExpUID(); if (refexpUID != null) { statement.bindString(1 + start, refexpUID); } else { statement.bindNull(1 + start); } String refexpNumber = model.getExpNumber(); if (refexpNumber != null) { statement.bindString(2 + start, refexpNumber); } else { statement.bindNull(2 + start); } String refexpSpellName = model.getExpSpellName(); if (refexpSpellName != null) { statement.bindString(3 + start, refexpSpellName); } else { statement.bindNull(3 + start); } statement.bindLong(4 + start, model.isCheck() ? 1 : 0); statement.bindLong(5 + start, model.getState()); String refexpTextName = model.getExpTextName(); if (refexpTextName != null) { statement.bindString(6 + start, refexpTextName); } else { statement.bindNull(6 + start); } } @Override public final void bindToStatement(DatabaseStatement statement, ExpStatus model) { bindToInsertStatement(statement, model, 0); } @Override public final String getCompiledStatementQuery() { return "INSERT OR ROLLBACK INTO `ExpStatus`(`expUID`,`expNumber`,`expSpellName`,`isCheck`,`state`,`expTextName`) VALUES (?,?,?,?,?,?)"; } @Override public final String getCreationQuery() { return "CREATE TABLE IF NOT EXISTS `ExpStatus`(`expUID` TEXT,`expNumber` TEXT NOT NULL,`expSpellName` TEXT NOT NULL,`isCheck` INTEGER,`state` INTEGER,`expTextName` TEXT, PRIMARY KEY(`expUID`)" + ");"; } @Override public final void loadFromCursor(Cursor cursor, ExpStatus model) { int index_expUID = cursor.getColumnIndex("expUID"); if (index_expUID != -1 && !cursor.isNull(index_expUID)) { model.setExpUID(cursor.getString(index_expUID)); } else { model.setExpUID(null); } int index_expNumber = cursor.getColumnIndex("expNumber"); if (index_expNumber != -1 && !cursor.isNull(index_expNumber)) { model.setExpNumber(cursor.getString(index_expNumber)); } else { model.setExpNumber(null); } int index_expSpellName = cursor.getColumnIndex("expSpellName"); if (index_expSpellName != -1 && !cursor.isNull(index_expSpellName)) { model.setExpSpellName(cursor.getString(index_expSpellName)); } else { model.setExpSpellName(null); } int index_isCheck = cursor.getColumnIndex("isCheck"); if (index_isCheck != -1 && !cursor.isNull(index_isCheck)) { model.setCheck(cursor.getInt(index_isCheck) == 1 ? true : false); } else { model.setCheck(false); } int index_state = cursor.getColumnIndex("state"); if (index_state != -1 && !cursor.isNull(index_state)) { model.setState(cursor.getInt(index_state)); } else { model.setState((int) 0); } int index_expTextName = cursor.getColumnIndex("expTextName"); if (index_expTextName != -1 && !cursor.isNull(index_expTextName)) { model.setExpTextName(cursor.getString(index_expTextName)); } else { model.setExpTextName(null); } model.getData(); } @Override public final boolean exists(ExpStatus model, DatabaseWrapper wrapper) { return SQLite.selectCountOf() .from(ExpStatus.class) .where(getPrimaryConditionClause(model)) .hasData(wrapper); } @Override public final OperatorGroup getPrimaryConditionClause(ExpStatus model) { OperatorGroup clause = OperatorGroup.clause(); clause.and(expUID.eq(model.getExpUID())); return clause; } @Override public final boolean delete(ExpStatus model) { boolean successful = super.delete(model); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.delete(); } } model.setData(null); return successful; } @Override public final boolean delete(ExpStatus model, DatabaseWrapper wrapper) { boolean successful = super.delete(model, wrapper); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.delete(wrapper); } } model.setData(null); return successful; } @Override public final boolean save(ExpStatus model) { boolean successful = super.save(model); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.save(); } } return successful; } @Override public final long insert(ExpStatus model) { long rowId = super.insert(model); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.insert(); } } return rowId; } @Override public final boolean update(ExpStatus model) { boolean successful = super.update(model); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.update(); } } return successful; } @Override public final boolean save(ExpStatus model, DatabaseWrapper wrapper) { boolean successful = super.save(model, wrapper); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.save(wrapper); } } return successful; } @Override public final long insert(ExpStatus model, DatabaseWrapper wrapper) { long rowId = super.insert(model, wrapper); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.insert(wrapper); } } return rowId; } @Override public final boolean update(ExpStatus model, DatabaseWrapper wrapper) { boolean successful = super.update(model, wrapper); if (model.getData() != null) { for (BaseModel value: model.getData()) { value.update(wrapper); } } return successful; } }
Any help will be appreciate.
this is a duplicate of #1281 .
DBFlow Version: 4.0.1 Issue Kind:Bug
Description: When i using 4.0.0-beta7 , It is ok to compile.But change to 4.0.1, it won't work,the generate code says it can't find "adapter" field in insert/save/update/delete method.
Here is my database model.
Here is generate code which using DbFlow 4.0.1
As you can see ,in insert/update/delete/save method ,the "adapter" field just appear and don't know come from where.
when i using 4.0.0-beta7,it is ok with generate code: here is generate code by 4.0.0-beta7:
Any help will be appreciate.