private void GenMessageBatchSave(MessageDef messageDef, TextWriter sw)
{
try {
sw.WriteLine();
sw.WriteLine("\t\tprivate static int BatchSave{0}(List<bool> validList, List<byte[]> dataList, int dataVersion)", messageDef.m_TypeName);
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tif (dataList.Count <= 0) {");
sw.WriteLine("\t\t\t return 0;");
sw.WriteLine("\t\t\t}");
sw.WriteLine("\t\t\tStringBuilder sbSql = new StringBuilder(\"insert into {0} \", 4096); ", messageDef.m_TypeName);
StringBuilder sbMember = new StringBuilder();
foreach (MemberDef memberDef in messageDef.m_Members) {
sbMember.Append(memberDef.m_MemberName);
sbMember.Append(',');
}
sbMember.Remove(sbMember.Length - 1, 1);
sw.WriteLine("\t\t\tsbSql.Append(\"(IsValid,DataVersion,{0})\");", sbMember.ToString());
sw.WriteLine("\t\t\tsbSql.Append(\" values \");", sbMember.ToString());
sw.WriteLine("\t\t\tfor (int i = 0; i < validList.Count; ++i) {");
sw.WriteLine("\t\t\t Byte valid = 1;");
sw.WriteLine("\t\t\t if (validList[i] == false) {");
sw.WriteLine("\t\t\t valid = 0;");
sw.WriteLine("\t\t\t }");
sw.WriteLine("\t\t\t StringBuilder sbValue = new StringBuilder();");
sw.WriteLine("\t\t\t sbValue.AppendFormat(\"({0},{1}\", valid, dataVersion);");
sw.WriteLine("\t\t\t object _msg;");
sw.WriteLine("\t\t\t if (DbDataSerializer.Decode(dataList[i], typeof({0}), out _msg)) {{", messageDef.m_TypeName);
sw.WriteLine("\t\t\t {0} msg = _msg as {0};", messageDef.m_TypeName);
foreach (MemberDef memberDef in messageDef.m_Members) {
sw.WriteLine("\t\t\t sbValue.Append(',');");
if (memberDef.m_TypeName.Equals("bool")) {
sw.WriteLine("\t\t\t sbValue.Append(msg.{0});", memberDef.m_MemberName);
} else {
sw.WriteLine("\t\t\t sbValue.AppendFormat(\"\'{{0}}\'\", msg.{0});", memberDef.m_MemberName);
}
}
sw.WriteLine("\t\t\t sbValue.Append(')');");
sw.WriteLine("\t\t\t sbSql.Append(sbValue.ToString());");
sw.WriteLine("\t\t\t sbSql.Append(',');");
sw.WriteLine("\t\t\t }");
sw.WriteLine("\t\t\t}");
sw.WriteLine("\t\t\tsbSql.Remove(sbSql.Length - 1, 1);");
sw.WriteLine("\t\t\tsbSql.Append(\" on duplicate key update \");");
sw.WriteLine("\t\t\tsbSql.AppendFormat(\" IsValid = if(DataVersion < {0}, values(IsValid), IsValid),\", dataVersion);");
foreach (MemberDef memberDef in messageDef.m_Members) {
sw.WriteLine("\t\t\tsbSql.AppendFormat(\" {0} = if(DataVersion < {{0}}, values({0}), {0}),\", dataVersion);", memberDef.m_MemberName);
}
sw.WriteLine("\t\t\tsbSql.AppendFormat(\" DataVersion = if(DataVersion < {0}, {0}, DataVersion),\", dataVersion);");
sw.WriteLine("\t\t\tsbSql.Remove(sbSql.Length - 1, 1);");
sw.WriteLine("\t\t\tstring statement = sbSql.ToString();");
sw.WriteLine("\t\t\tint count = 0;");
sw.WriteLine("\t\t\ttry {");
sw.WriteLine("\t\t\t using (MySqlCommand cmd = new MySqlCommand()) {");
sw.WriteLine("\t\t\t cmd.Connection = DBConn.MySqlConn;");
sw.WriteLine("\t\t\t cmd.CommandType = CommandType.Text;");
sw.WriteLine("\t\t\t cmd.CommandText = statement;");
sw.WriteLine("\t\t\t count = cmd.ExecuteNonQuery();");
sw.WriteLine("\t\t\t }");
sw.WriteLine("\t\t\t} catch (Exception ex) {");
sw.WriteLine("\t\t\t if (dataList.Count < 200) {");
sw.WriteLine("\t\t\t LogSys.Log(LOG_TYPE.ERROR, \"Error Sql statement:{0}\", statement);");
sw.WriteLine("\t\t\t }");
sw.WriteLine("\t\t\t DBConn.Close();");
sw.WriteLine("\t\t\t throw ex;");
sw.WriteLine("\t\t\t}");
sw.WriteLine("\t\t\treturn count;");
sw.WriteLine("\t\t}");
sw.WriteLine();
} catch (Exception ex) {
Console.WriteLine(ex);
}
}