saveRecord method
Implementation
Future<Map<String,dynamic>> saveRecord() async{
Map<String,dynamic> result={"status":"failure","message":"nothing executed","operation":"INSERT"};
try{
String primaryKeyField="id";
result[attributePrimaryKey]=primaryKeyField;
int primaryKeyValue=0;
formatValues();
String validateStatus=validateValues();
if(validateStatus=="success"){
Map<String,dynamic> values=new Map();
Map<String,dynamic> userDefinedFunctions=new Map();
String uniqueCondition="1=1";
fields.forEach((name,field){
var value=getFieldValue(name);
if(name.equalsIgnoreCase("id")){
primaryKeyValue=int.parse(value.toString());
}
String type=field[fieldType];
List attributes=getFieldAttributes(name);
if(attributes.contains(attributeUniqueKey)||attributes.contains(attributeCheckUnique)||attributes.contains(attributeCheckModify)||attributes.contains(attributeCheckUpdate)){
uniqueCondition+=" AND $name="+getFieldSQLValue(name);
}
userDefinedFunctions=updateUserDefinedFunction(userDefinedFunctions,name);
if(!attributes.contains(attributeAutoIncrement)&&!attributes.contains(attributeTimestamp)&&type!=typeUserDefinedFunction){
values[name]=value;
}
});
Map<String,dynamic> fetchResponse=await fetchRecords(condition: uniqueCondition);
if(fetchResponse["status"].toString()=="success"){
List fetchRecords=fetchResponse["records"];
if(fetchRecords.isNotEmpty){
Map<String,dynamic> record=fetchRecords.first;
primaryKeyValue=record[primaryKeyField];
uniqueCondition+=" AND $primaryKeyField=$primaryKeyValue";
result["operation"]="UPDATE";
}
}
Map<String,dynamic> response;
if(result["operation"].toString()=="INSERT"){
response=await dbHandler!.insertRecords(table: table,values: values,userDefinedFunctions:userDefinedFunctions);
}
else{
response=await dbHandler!.updateConditionedRecords(table: table,values: values,userDefinedFunctions:userDefinedFunctions,condition:uniqueCondition);
}
if(response.getString("status").equalsIgnoreCase("success")){
result["status"]="success";
if(result["operation"].toString()=="INSERT") {
result["message"] = "record inserted successfully";
primaryKeyValue=response["record_id"];
}
else{
result["message"] = "${response["records"]} record(s) updated successfully";
result["record_count"] =response["records"];
}
if(primaryKeyField!=""){
Map<String,dynamic> savedResponse=await fetchRecords(condition: "$primaryKeyField=$primaryKeyValue");
if(savedResponse["status"].toString()=="success"){
List savedRecords=savedResponse["records"];
if(savedRecords.isNotEmpty){
result["record"]=savedRecords.first;
}
else{
result["message"]="fetch count 0";
}
}
else{
result["message"]=savedResponse["message"];
}
}
}
else{
result["message"]=response["message"];
}
}
else{
result["message"]=validateStatus;
}
}
catch(ex,stack){
result["message"]=Simplify.getExceptionMessage(ex,stack: stack);
}
return result;
}