LogicDataGenerator.MessageDslParser.GenAllMessageDDL C# (CSharp) Method

GenAllMessageDDL() private method

private GenAllMessageDDL ( string file ) : void
file string
return void
        internal void GenAllMessageDDL(string file, params string[] groups)
        {
            HashSet<string> expectGroups = new HashSet<string>(groups);
              if (expectGroups.Count <= 0) {
            expectGroups.Add(string.Empty);
              }
              using (StreamWriter sw = new StreamWriter(file, true)) {
            sw.WriteLine("#----------------------------------------------------------------------------");
            sw.WriteLine("#!!!不要手动修改此文件,此文件由LogicDataGenerator按{0}生成!!!", m_DslFile);
            sw.WriteLine("#----------------------------------------------------------------------------");
            foreach (string line in m_Explanation) {
              sw.WriteLine("#{0}", line);
            }
            sw.WriteLine();
            sw.WriteLine("call SetDSNodeVersion('{0}');", m_Version);
            sw.WriteLine();
            foreach (var messagePair in m_Messages) {
              string message = messagePair.Key;
              MessageDef messageDef = messagePair.Value;
              if (!messageDef.m_DontGenDB && expectGroups.Contains(messageDef.m_GroupName)) {
            string primaryKeyClause = string.Join(",", messageDef.m_PrimaryKeys.ToArray());
            sw.WriteLine("create table {0}", messageDef.m_TypeName);
            sw.WriteLine("(");
            sw.WriteLine("\tAutoKey int not null auto_increment,");
            sw.WriteLine("\tIsValid boolean not null,");
            sw.WriteLine("\tDataVersion int not null,");
            foreach (MemberDef memberDef in messageDef.m_Members) {
              string sqlType = GetSqlType(memberDef.m_TypeName);
              if (0 == sqlType.CompareTo("varchar")) {
                int size;
                if (memberDef.m_MaxSize > 0) {
                  size = memberDef.m_MaxSize;
                } else {
                  size = m_DefVarcharSize;
                }
                if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
                  sw.WriteLine("\t{0} varchar({1}) binary not null,", memberDef.m_MemberName, size);
                } else {
                  sw.WriteLine("\t{0} varchar({1}) not null,", memberDef.m_MemberName, size);
                }
              } else {
                sw.WriteLine("\t{0} {1} not null,", memberDef.m_MemberName, sqlType);
              }
            }
            sw.WriteLine("\tprimary key (AutoKey)");
            sw.WriteLine(") ENGINE=InnoDB;");
            sw.WriteLine("create unique index {0}PrimaryIndex on {1} ({2});", messageDef.m_TypeName, messageDef.m_TypeName, primaryKeyClause);
            if (messageDef.m_ForeignKeys.Count > 0) {
              sw.WriteLine("create index {0}Index on  {1} ({2});", messageDef.m_TypeName, messageDef.m_TypeName, string.Join(",", messageDef.m_ForeignKeys.ToArray()));
            }
            sw.WriteLine();
              }
            }
            sw.WriteLine();
            sw.WriteLine("#----------------------------------------------------------------------------------------------------------------------");
            sw.WriteLine();
            foreach (var messagePair in m_Messages) {
              string message = messagePair.Key;
              MessageDef messageDef = messagePair.Value;
              if (!messageDef.m_DontGenDB && expectGroups.Contains(messageDef.m_GroupName)) {
            string primaryKeyClause = string.Join(",", messageDef.m_PrimaryKeys.ToArray());
            sw.WriteLine("drop procedure if exists Save{0};", messageDef.m_TypeName);
            sw.WriteLine("delimiter $$");
            sw.WriteLine("create procedure Save{0}(", messageDef.m_TypeName);
            sw.WriteLine("\tin _IsValid boolean");
            sw.WriteLine("\t,in _DataVersion int");
            foreach (MemberDef memberDef in messageDef.m_Members) {
              string sqlType = GetSqlType(memberDef.m_TypeName);
              if (0 == sqlType.CompareTo("varchar")) {
                int size;
                if (memberDef.m_MaxSize > 0) {
                  size = memberDef.m_MaxSize;
                } else {
                  size = m_DefVarcharSize;
                }
                if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
                  sw.WriteLine("\t,in _{0} varchar({1})", memberDef.m_MemberName, size);
                } else {
                  sw.WriteLine("\t,in _{0} varchar({1})", memberDef.m_MemberName, size);
                }
              } else {
                sw.WriteLine("\t,in _{0} {1}", memberDef.m_MemberName, sqlType);
              }
            }
            sw.WriteLine(")");
            sw.WriteLine("begin");
            sw.WriteLine("\tinsert into {0} (AutoKey,IsValid,DataVersion,{1})", messageDef.m_TypeName, string.Join(",", messageDef.m_ColumnNames.ToArray()));
            sw.WriteLine("\t\tvalues ");
            sw.WriteLine("\t\t\t(null,_IsValid,_DataVersion");
            foreach (string name in messageDef.m_ColumnNames) {
              sw.WriteLine("\t\t\t,_{0}", name);
            }
            sw.WriteLine("\t\t\t)");
            sw.WriteLine("\t\ton duplicate key update ");
            sw.WriteLine("\t\t\tIsValid =  if(DataVersion < _DataVersion, _IsValid, IsValid),");
            foreach (string name in messageDef.m_ColumnNames) {
              sw.WriteLine("\t\t\t{0} =  if(DataVersion < _DataVersion, _{1}, {2}),", name, name, name);
            }
            sw.WriteLine("\t\t\tDataVersion =  if(DataVersion < _DataVersion, _DataVersion, DataVersion);");
            sw.WriteLine("end $$");
            sw.WriteLine("delimiter ;");
            sw.WriteLine();
              }
            }
            sw.WriteLine();
            sw.WriteLine("#----------------------------------------------------------------------------------------------------------------------");
            sw.WriteLine();
            foreach (var messagePair in m_Messages) {
              string message = messagePair.Key;
              MessageDef messageDef = messagePair.Value;
              if (!messageDef.m_DontGenDB && expectGroups.Contains(messageDef.m_GroupName)) {
            sw.WriteLine("drop procedure if exists LoadAll{0};", messageDef.m_TypeName);
            sw.WriteLine("delimiter $$");
            sw.WriteLine("create procedure LoadAll{0}(in _Start int, in _Count int)", messageDef.m_TypeName);
            sw.WriteLine("begin");
            sw.WriteLine("\tselect * from {0} where IsValid = 1 limit _Start, _Count;", messageDef.m_TypeName);
            sw.WriteLine("end $$");
            sw.WriteLine("delimiter ;");
            sw.WriteLine();
            if (messageDef.m_PrimaryKeys.Count > 0) {
              sw.WriteLine("drop procedure if exists LoadSingle{0};", messageDef.m_TypeName);
              sw.WriteLine("delimiter $$");
              sw.WriteLine("create procedure LoadSingle{0}(", messageDef.m_TypeName);
              string prefix = string.Empty;
              foreach (MemberDef memberDef in messageDef.m_Members) {
                if (memberDef.m_IsPrimaryKey) {
                  string sqlType = GetSqlType(memberDef.m_TypeName);
                  if (0 == sqlType.CompareTo("varchar")) {
                    int size;
                    if (memberDef.m_MaxSize > 0) {
                      size = memberDef.m_MaxSize;
                    } else {
                      size = m_DefVarcharSize;
                    }
                    if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
                      sw.WriteLine("\t{0}in _{1} varchar({2})", prefix, memberDef.m_MemberName, size);
                    } else {
                      sw.WriteLine("\t{0}in _{1} varchar({2})", prefix, memberDef.m_MemberName, size);
                    }
                  } else {
                    sw.WriteLine("\t{0}in _{1} {2}", prefix, memberDef.m_MemberName, sqlType);
                  }
                  prefix = ",";
                }
              }
              sw.WriteLine(")");
              sw.WriteLine("begin");
              sw.WriteLine("\tselect * from {0} where IsValid = 1 ", messageDef.m_TypeName);
              foreach (string name in messageDef.m_PrimaryKeys) {
                sw.WriteLine("\t\tand {0} = _{1} ", name, name);
              }
              sw.WriteLine("\t\t;");
              sw.WriteLine("end $$");
              sw.WriteLine("delimiter ;");
              sw.WriteLine();
            }
            if (messageDef.m_ForeignKeys.Count > 0) {
              sw.WriteLine("drop procedure if exists LoadMulti{0};", messageDef.m_TypeName);
              sw.WriteLine("delimiter $$");
              sw.WriteLine("create procedure LoadMulti{0}(", messageDef.m_TypeName);
              string prefix = string.Empty;
              foreach (MemberDef memberDef in messageDef.m_Members) {
                if (memberDef.m_IsForeignKey) {
                  string sqlType = GetSqlType(memberDef.m_TypeName);
                  if (0 == sqlType.CompareTo("varchar")) {
                    int size;
                    if (memberDef.m_MaxSize > 0) {
                      size = memberDef.m_MaxSize;
                    } else {
                      size = m_DefVarcharSize;
                    }
                    if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
                      sw.WriteLine("\t{0}in _{1} varchar({2})", prefix, memberDef.m_MemberName, size);
                    } else {
                      sw.WriteLine("\t{0}in _{1} varchar({2})", prefix, memberDef.m_MemberName, size);
                    }
                  } else {
                    sw.WriteLine("\t{0}in _{1} {2}", prefix, memberDef.m_MemberName, sqlType);
                  }
                  prefix = ",";
                }
              }
              sw.WriteLine(")");
              sw.WriteLine("begin");
              sw.WriteLine("\tselect * from {0} where IsValid = 1 ", messageDef.m_TypeName);
              foreach (string name in messageDef.m_ForeignKeys) {
                sw.WriteLine("\t\tand {0} = _{1} ", name, name);
              }
              sw.WriteLine("\t\t;");
              sw.WriteLine("end $$");
              sw.WriteLine("delimiter ;");
              sw.WriteLine();
            }
              }
            }
            sw.Close();
              }
        }

Usage Example

Esempio n. 1
0
 private static void GenServerData()
 {
     MessageDslParser parser = new MessageDslParser();
       parser.Init("DataProto/Data.dsl");
       parser.GenAllMessageWraps("DataProto/Data.cs", string.Empty);
       parser.GenAllMessagesEnum("DataProto/DataEnum.cs", "DataEnum", string.Empty);
       parser.GenAllMessageProtos("DataProto/Data.proto", string.Empty);
       parser.GenAllMessageDDL("DataProto/CreateDataTables.sql", string.Empty);
       parser.GenAllMessageDML("DataProto/DataDML.cs", "DataEnum", string.Empty);
 }