private string InferTableTypes(KProtoFile kProtoFile) { var tableTypes = new List <CTableType>(); //generate Sql text, it will turn back into a KTable later var codeWriter = new CodeWriter(); foreach (var rpc in kProtoFile.GeneratedProtoFile.GetRpcListThatSet()) { var request = rpc.GetInnerMessageOrRequest(); InferTableType(tableTypes, rpc, request); } foreach (var rpc in kProtoFile.GeneratedProtoFile.GetRpcListThatGet()) { var response = rpc.GetInnerMessageOrResponse(); InferTableType(tableTypes, rpc, response); } var converter = new CTableTypeToSqlServerTableTypeConverter(); foreach (var tableType in tableTypes) { codeWriter.WriteLine(converter.Convert(tableType)); codeWriter.WriteLine("GO"); codeWriter.WriteLine(); this.TableType.Add(new KTableType() { DerivedFrom = tableType.DerivedFrom, Schema = tableType.Schema.SchemaName, TableTypeName = tableType.TableName, GeneratedTableType = tableType }); } return(codeWriter.ToString()); }
public override void Visit(CPart part) { if (part is CTableType) { var tableType = part as CTableType; //var ddl = (part as STableType).TableTypeBody; if (tableType.DatabaseType == Utility.DataStoreTypes.SqlServer) { var converter = new CTableTypeToSqlServerTableTypeConverter(); var ddl = converter.Convert(part as CTableType); _codeWriter.Write(ddl); } else if (tableType.DatabaseType == Utility.DataStoreTypes.Postgres) { var converter = new CTableTypeToPostgresTableTypeConverter(); var ddl = converter.Convert(part as CTableType); _codeWriter.Write(ddl); } else { throw new NotImplementedException(); } } else if (part is CTable) { var table = part as CTable; if (table.DatabaseType == Utility.DataStoreTypes.SqlServer) { if (!string.IsNullOrEmpty(table.TableText)) { _codeWriter.Write(table.TableText); } else { var converter = new CTableToSqlServerTableConverter(); var ddl = converter.Convert(table); _codeWriter.Write(ddl); } } else if (table.DatabaseType == Utility.DataStoreTypes.Postgres) { var converter = new CTableToPostgresTableConverter(); var ddl = converter.Convert(table); _codeWriter.Write(ddl); } else if (table.DatabaseType == Utility.DataStoreTypes.MySql) { var converter = new CTableToMySqlTableConverter(); var ddl = converter.Convert(table); _codeWriter.Write(ddl); } else { throw new NotImplementedException(); } } else if (part is CView) { var ddl = (part as CView).ViewText; _codeWriter.Write(ddl); } else if (part is CSchema) { var schema = part as CSchema; if (schema.DatabaseType == Utility.DataStoreTypes.SqlServer) { var converter = new CSchemaToSqlServerSchemaConverter(); var ddl = converter.Convert(schema); _codeWriter.Write(ddl); } else if (schema.DatabaseType == Utility.DataStoreTypes.Postgres) { var converter = new CSchemaToPostgresSchemaConverter(); var ddl = converter.Convert(schema); _codeWriter.Write(ddl); } else if (schema.DatabaseType == Utility.DataStoreTypes.MySql) { var converter = new CSchemaToMySqlSchemaConverter(); var ddl = converter.Convert(schema); _codeWriter.Write(ddl); } else { throw new NotImplementedException(); } } else if (part is CStoredProcedure) { var storedProc = part as CStoredProcedure; ICStoredProcedureToStoredProcedureConverter converter = null; if (storedProc.DatabaseType == Utility.DataStoreTypes.SqlServer) { converter = new CStoredProcedureToSSqlServerStoredProcedureConverter(); } else if (storedProc.DatabaseType == Utility.DataStoreTypes.Postgres) { converter = new CStoredProcedureToPostgresStoredProcedureConverter(); } else { throw new NotImplementedException(); } var ddl = converter.Convert(storedProc); _codeWriter.Write(ddl); } else if (part is CRules) { var rules = part as CRules; var json = rules.ToJson(); _codeWriter.Write(json); } else if (part is CSeedScript) { var seedScript = part as CSeedScript; _codeWriter.Write(seedScript.SeedScriptBody); } else if (part is CProtoFile) { var protoFile = part as CProtoFile; if (!string.IsNullOrEmpty(protoFile.SourceProtoText)) { //source may have full comments _codeWriter.Write(protoFile.SourceProtoText); } else { var converter = new SProtoFileToProtoFileConverter(); _codeWriter.Write(converter.Convert(protoFile)); } } else if (part is CProtoFileRef) { var protoFileRef = part as CProtoFileRef; var converter = new SProtoFileToProtoFileConverter(); _codeWriter.Write(converter.Convert(protoFileRef.ProtoFile)); } else if (part is CText) { var textFile = part as CText; _codeWriter.Write(textFile.Text); } else if (part is CBatchFile) { var batchFile = part as CBatchFile; _codeWriter.Write(batchFile.BatchFileContent); } else { base.Visit(part); } }