better c# export, still TODO

This commit is contained in:
Mystikfluu 2023-04-15 15:27:12 +02:00
parent dfb92358fc
commit aca4c8d933

View File

@ -87,30 +87,30 @@ public class C4 {
this.databaseName = this.databaseName.toLowerCase();
this.sqlScript = new StringBuffer();
sqlScript = new StringBuffer();
this.sqlScript.append("-- #######################################################\n");
this.sqlScript.append("-- auto generated ddl-script ###########################\n");
this.sqlScript.append("-- generated sql creation script for ER model\n");
this.sqlScript.append("-- switch autocommit off\n");
this.sqlScript.append("set implicit_transactions off;\n");
this.sqlScript.append("-- database-#############################################\n");
this.sqlScript.append("use master;\n");
this.sqlScript.append("drop database if exists ").append(this.databaseName).append(";").append("\n");
this.sqlScript.append("create database ").append(this.databaseName).append(";").append("\n");
this.sqlScript.append("go \n");
this.sqlScript.append("use ").append(this.databaseName).append(";").append("\n");
sqlScript.append("-- #######################################################\n");
sqlScript.append("-- auto generated ddl-script ###########################\n");
sqlScript.append("-- generated sql creation script for ER model\n");
sqlScript.append("-- switch autocommit off\n");
sqlScript.append("set implicit_transactions off;\n");
sqlScript.append("-- database-#############################################\n");
sqlScript.append("use master;\n");
sqlScript.append("drop database if exists ").append(this.databaseName).append(";").append("\n");
sqlScript.append("create database ").append(this.databaseName).append(";").append("\n");
sqlScript.append("go \n");
sqlScript.append("use ").append(this.databaseName).append(";").append("\n");
this.sqlScript.append("-- tables-#################################################\n");
sqlScript.append("-- tables-#################################################\n");
for (T1 table : this.tables) {
this.sqlScript = this.sqlScript.append("-- table ").append(table.getTablename()).append("\n");
this.sqlScript = this.sqlScript.append("create table ").append(table.getTablename()).append("(").append("\n");
sqlScript = sqlScript.append("-- table ").append(table.getTablename()).append("\n");
sqlScript = sqlScript.append("create table ").append(table.getTablename()).append("(").append("\n");
StringBuilder keypart = new StringBuilder("primary key(");
int autoincrementCounter = 0;
for (C3 column : table.getSkjdfhgdskjf674534()) {
keypart.append(column.isKey() ? (column.getColumnName() + ",") : "");
this.sqlScript = this.sqlScript.append(addChars()).append(column.getColumnName()).append(" ").append(column.getDatatype()).append(column.isKey() ? " not null" : "").append((
sqlScript = sqlScript.append(addChars()).append(column.getColumnName()).append(" ").append(column.getDatatype()).append(column.isKey() ? " not null" : "").append((
!column.isKey() && !column.isNullable()) ? " not null" : "").append(column.isAutoincrement() ? (" identity (" + column.getAutoincrementStartAt() + ",1) ") : "").append(column.isUnique() ? " unique" : "").append(",").append("\n");
if (column.isAutoincrement()) {
autoincrementCounter++;
@ -120,8 +120,8 @@ public class C4 {
keypart = new StringBuilder(keypart.substring(0, keypart.length() - 1));
keypart.append(")").append("\n");
this.sqlScript = this.sqlScript.append(addChars()).append(keypart).append(")");
this.sqlScript.append(";\n\n");
sqlScript = sqlScript.append(addChars()).append(keypart).append(")");
sqlScript.append(";\n\n");
if (autoincrementCounter != 1) {
if (autoincrementCounter > 1) {
@ -137,11 +137,11 @@ public class C4 {
} catch (ZZ20 ex) {
throw new ZZ20(ex.getMessage());
}
createInsertStatements(this.sqlScript, singeInserts, false);
createInsertStatements(sqlScript, singeInserts, false);
}
this.sqlScript.append("\n-- foreign keys-#################################################\n");
sqlScript.append("\n-- foreign keys-#################################################\n");
for (T1 table : this.tables) {
ArrayList<C3> fkColumns = new ArrayList<>();
@ -168,9 +168,9 @@ public class C4 {
}
}
for (C3 col : equalColumnsBecauseRecursive) {
this.sqlScript = this.sqlScript.append("alter table ").append(table.getTablename()).append("\n");
this.sqlScript.append("add foreign key (");
this.sqlScript = this.sqlScript.append(col.getColumnName()).append(")").append(" references ").append(col.getReferencesTo().tablename()).append("(").append(col.getReferencesTo().columnname()).append(")").append(" on delete no action on update no action;\n");
sqlScript = sqlScript.append("alter table ").append(table.getTablename()).append("\n");
sqlScript.append("add foreign key (");
sqlScript = sqlScript.append(col.getColumnName()).append(")").append(" references ").append(col.getReferencesTo().tablename()).append("(").append(col.getReferencesTo().columnname()).append(")").append(" on delete no action on update no action;\n");
tableNamesInfkColumns.remove(col.getReferencesTo().tablename());
}
@ -178,8 +178,8 @@ public class C4 {
for (String tableName : tableNamesInfkColumns) {
this.sqlScript = this.sqlScript.append("alter table ").append(table.getTablename()).append("\n");
this.sqlScript.append("add foreign key (");
sqlScript = sqlScript.append("alter table ").append(table.getTablename()).append("\n");
sqlScript.append("add foreign key (");
StringBuilder columnsOrig = new StringBuilder();
StringBuilder refColumns = new StringBuilder(" references " + tableName + "(");
for (C3 fkcolumn : fkColumns) {
@ -192,15 +192,15 @@ public class C4 {
columnsOrig.append(")");
refColumns = new StringBuilder(refColumns.substring(0, refColumns.length() - 1));
refColumns.append(")");
this.sqlScript.append(columnsOrig).append(refColumns).append(" on delete no action on update no action;\n");
sqlScript.append(columnsOrig).append(refColumns).append(" on delete no action on update no action;\n");
}
this.sqlScript.replace(this.sqlScript.length() - 2, this.sqlScript.length(), ";\n");
sqlScript.replace(sqlScript.length() - 2, sqlScript.length(), ";\n");
}
this.sqlScript.append("-- commit all changes\n");
this.sqlScript.append("commit;");
sqlScript.append("-- commit all changes\n");
sqlScript.append("commit;");
return this.sqlScript;
return sqlScript;
}
@ -219,29 +219,29 @@ public class C4 {
this.databaseName = this.databaseName.toLowerCase();
this.sqlScript = new StringBuffer();
sqlScript = new StringBuffer();
this.sqlScript.append("-- #######################################################\n");
this.sqlScript.append("-- auto generated ddl-script ###########################\n");
this.sqlScript.append("-- generated sql creation script for ER model\n");
this.sqlScript.append("-- database-#############################################\n");
this.sqlScript.append("drop database if exists ").append(this.databaseName).append(";").append("\n");
this.sqlScript.append("create database ").append(this.databaseName).append(";").append("\n");
this.sqlScript.append("use ").append(this.databaseName).append(";").append("\n");
this.sqlScript.append("-- switch autocommit off\n");
this.sqlScript.append("set autocommit=0;\n");
sqlScript.append("-- #######################################################\n");
sqlScript.append("-- auto generated ddl-script ###########################\n");
sqlScript.append("-- generated sql creation script for ER model\n");
sqlScript.append("-- database-#############################################\n");
sqlScript.append("drop database if exists ").append(this.databaseName).append(";").append("\n");
sqlScript.append("create database ").append(this.databaseName).append(";").append("\n");
sqlScript.append("use ").append(this.databaseName).append(";").append("\n");
sqlScript.append("-- switch autocommit off\n");
sqlScript.append("set autocommit=0;\n");
this.sqlScript.append("-- tables-#################################################\n");
sqlScript.append("-- tables-#################################################\n");
for (T1 table : this.tables) {
this.sqlScript = this.sqlScript.append("-- table ").append(table.getTablename()).append("\n");
this.sqlScript = this.sqlScript.append("create table ").append(table.getTablename()).append("(").append("\n");
sqlScript = sqlScript.append("-- table ").append(table.getTablename()).append("\n");
sqlScript = sqlScript.append("create table ").append(table.getTablename()).append("(").append("\n");
StringBuilder keypart = new StringBuilder("primary key(");
int autoincrementCounter = 0;
long holdAutoincrementStartAt = 1L;
for (C3 column : table.getSkjdfhgdskjf674534()) {
keypart.append(column.isKey() ? (column.getColumnName() + ",") : "");
this.sqlScript = this.sqlScript.append(addChars()).append(column.getColumnName()).append(" ").append(column.getDatatype()).append(column.isKey() ? " not null" : "").append((
sqlScript = sqlScript.append(addChars()).append(column.getColumnName()).append(" ").append(column.getDatatype()).append(column.isKey() ? " not null" : "").append((
!column.isKey() && !column.isNullable()) ? " not null" : "").append(column.isAutoincrement() ? " auto_increment " : "").append(column.isUnique() ? " unique" : "").append(",").append("\n");
if (column.isAutoincrement()) {
autoincrementCounter++;
@ -251,13 +251,13 @@ public class C4 {
keypart = new StringBuilder(keypart.substring(0, keypart.length() - 1));
keypart.append(")").append("\n");
this.sqlScript = this.sqlScript.append(addChars()).append(keypart).append(")");
sqlScript = sqlScript.append(addChars()).append(keypart).append(")");
if (autoincrementCounter == 1) {
this.sqlScript.append("auto_increment=").append(holdAutoincrementStartAt);
sqlScript.append("auto_increment=").append(holdAutoincrementStartAt);
} else if (autoincrementCounter > 1) {
throw new ZZ20("There is only one autoincrement value allowed, and it must be the key. Table: " + table.getTablename());
}
this.sqlScript.append(";\n\n");
sqlScript.append(";\n\n");
}
@ -269,11 +269,11 @@ public class C4 {
throw new ZZ20(ex.getMessage());
}
createInsertStatements(this.sqlScript, singeInserts, true);
createInsertStatements(sqlScript, singeInserts, true);
}
this.sqlScript.append("\n-- foreign keys-#################################################\n");
sqlScript.append("\n-- foreign keys-#################################################\n");
for (T1 table : this.tables) {
ArrayList<C3> fkColumns = new ArrayList<>();
@ -282,7 +282,7 @@ public class C4 {
}
if (fkColumns.size() == 0)
continue;
this.sqlScript = this.sqlScript.append("alter table ").append(table.getTablename()).append("\n");
sqlScript = sqlScript.append("alter table ").append(table.getTablename()).append("\n");
HashSet<String> tableNamesInfkColumns = new HashSet<>();
@ -301,8 +301,8 @@ public class C4 {
}
}
for (C3 col : equalColumnsBecauseRecursive) {
this.sqlScript.append("add foreign key (");
this.sqlScript = this.sqlScript.append(col.getColumnName()).append(")").append(" references ").append(col.getReferencesTo().tablename()).append("(").append(col.getReferencesTo().columnname()).append(")").append(" on delete restrict on update restrict,\n");
sqlScript.append("add foreign key (");
sqlScript = sqlScript.append(col.getColumnName()).append(")").append(" references ").append(col.getReferencesTo().tablename()).append("(").append(col.getReferencesTo().columnname()).append(")").append(" on delete restrict on update restrict,\n");
tableNamesInfkColumns.remove(col.getReferencesTo().tablename());
}
@ -310,7 +310,7 @@ public class C4 {
for (String tableName : tableNamesInfkColumns) {
this.sqlScript.append("add foreign key (");
sqlScript.append("add foreign key (");
StringBuilder columnsOrig = new StringBuilder();
StringBuilder refColumns = new StringBuilder(" references " + tableName + "(");
for (C3 fkcolumn : fkColumns) {
@ -323,15 +323,15 @@ public class C4 {
columnsOrig.append(")");
refColumns = new StringBuilder(refColumns.substring(0, refColumns.length() - 1));
refColumns.append(")");
this.sqlScript.append(columnsOrig).append(refColumns).append(" on delete restrict on update restrict,\n");
sqlScript.append(columnsOrig).append(refColumns).append(" on delete restrict on update restrict,\n");
}
this.sqlScript.replace(this.sqlScript.length() - 2, this.sqlScript.length(), ";\n");
sqlScript.replace(sqlScript.length() - 2, sqlScript.length(), ";\n");
}
this.sqlScript.append("-- commit all changes\n");
this.sqlScript.append("commit;");
sqlScript.append("-- commit all changes\n");
sqlScript.append("commit;");
return this.sqlScript;
return sqlScript;
}
@ -384,99 +384,63 @@ public class C4 {
return csType != null ? csType : "object";
}
public StringBuffer create_CS_Script() throws ZZ20 {
this.databaseName = T3.replaceSpecialChars(this.databaseName);
this.databaseName = this.databaseName.toLowerCase();
this.sqlScript = new StringBuffer();
this.sqlScript.append("var opt = new DbContextOptionsBuilder()\n" + " .UseSqlite(@\"Data Source=").append(this.databaseName).append(".db\")\n").append(" .Options;\n");
this.sqlScript.append("// tables-#################################################\n");
for (T1 table : this.tables) {
if(table.getSkjdfhgdskjf674534().size() > 0) {
this.sqlScript = this.sqlScript.append("[Table(\"").append(table.getTablename()).append("\")]\n");
this.sqlScript = this.sqlScript.append("public class ").append(table.getTablename().substring(table.getTablenamePraefix().length())).append(" {").append("\n");
StringBuilder constructorbuilder = new StringBuilder("\n").append(addChars()).append("public ").append(table.getTablename().substring(table.getTablenamePraefix().length())).append("(");
StringBuilder innerconstructorbuilder = new StringBuilder();
int autoincrementCounter = 0;
long holdAutoincrementStartAt = 1L;
for (C3 column : table.getSkjdfhgdskjf674534()) {
System.out.println(column.getColumnName()+"\t"+sqltoCSType(column.getDatatype()));
String shortcolumnname = column.getColumnName().substring(column.getColumnName().lastIndexOf('_')+1);
this.sqlScript.append(addChars())
.append(column.isKey() ? ("[Key]\n"+addChars()) : "")
.append("[Column(TypeName=\"")
.append(column.getDatatype())
.append("\")]\n")
.append(addChars())
.append(!column.isNullable() ? "[Required]\n"+addChars() : "")
.append(column.isUnique()?"[Index(\""+column.getColumnName()+"Index\", IsUnique = true)]":"")
.append(column.isAutoincrement()?"[DatabaseGenerated(DatabaseGeneratedOption.Identity)]":"")
.append(sqltoCSType(column.getDatatype()))
.append(" ")
//a_id = id, a_b_id = id
.append(shortcolumnname)
.append(" { get; ")
.append(column.isKey()?"":"private ")
.append("set; }\n");
constructorbuilder.append(sqltoCSType(column.getDatatype()))
.append(" ").append(shortcolumnname).append(", ");
innerconstructorbuilder.append(addChars()).append(addChars()).append("this.").append(shortcolumnname).append("=").append(shortcolumnname).append(";\n");
if (column.isAutoincrement()) {
autoincrementCounter++;
holdAutoincrementStartAt = column.getAutoincrementStartAt();
}
public static String shortname(String s) {
return s.substring(s.lastIndexOf('_')+1);
}
constructorbuilder.delete(constructorbuilder.length()-2,constructorbuilder.length());
constructorbuilder.append(") {\n").append(innerconstructorbuilder).append(addChars()).append("}\n");
sqlScript.append(addChars()).append(constructorbuilder).append(addChars()).append("public ").append(table.getTablename().substring(table.getTablenamePraefix().length())).append("(){}\n");
this.sqlScript.append("}");
/*
if (autoincrementCounter == 1) {
this.sqlScript.append("auto_increment=").append(holdAutoincrementStartAt);
} else if (autoincrementCounter > 1) {
throw new ZZ20("There is only one autoincrement value allowed, and it must be the key. Table: " + table.getTablename());
}
*/
this.sqlScript.append("\n\n");
}
}
/*
public static string convertSqlToCSharp(string sqlStatement)
public static String convertSqlToCSharp(String sqlStatement)
{
// Split the SQL statement by spaces and identify the foreign key keywords
string[] words = sqlStatement.Split(' ');
int index = Array.IndexOf(words, "FOREIGN") + 1;
System.out.println(sqlStatement);
String[] words = sqlStatement.split(" ");
int index = -1; //Array.IndexOf(words, "FOREIGN") + 1;
StringBuilder csharpCode = new StringBuilder("\tprotected override void OnModelCreating(ModelBuilder modelBuilder)\n\t{\n");
for (int i = 0; i < words.length; i++) {
System.out.println(words[i]);
if (words[i].equalsIgnoreCase("FOREIGN")) {
index = i;
// Extract the table names and key names from the SQL statement
string primaryTable = words[index - 3];
string primaryKey = words[index - 1];
string foreignTable = words[index + 2];
string foreignKey = words[index + 4];
String primaryTable = words[index - 2];
String primaryKey = words[index + 2];
String foreignTable = words[index + 4];
String foreignKey = words[index + 5];
foreignKey = foreignKey.substring(1,foreignKey.length()-1);
foreignTable = shortname(foreignTable);
foreignKey = shortname(foreignKey);
// Generate the C# EF Core code based on the extracted information
string csharpCode = "modelBuilder.Entity<" + foreignTable + ">()\n";
csharpCode += ".HasOne(" + foreignTable.ToLower() + " => " + foreignTable.ToLower() + "." + foreignKey + ")\n";
csharpCode += ".WithMany()\n";
csharpCode += ".HasForeignKey(" + foreignTable.ToLower() + " => " + foreignTable.ToLower() + "." + foreignKey + ");\n";
return csharpCode;
csharpCode.append("\t\tmodelBuilder.Entity<").append(foreignTable).append(">()\n");
csharpCode.append("\t\t.HasOne(e => e.").append(foreignKey.toLowerCase()).append(")\n");
csharpCode.append("\t\t.WithMany(e => e.").append(primaryTable.toLowerCase()).append(")\n");
csharpCode.append("\t\t.HasForeignKey(\"").append(foreignKey).append("\");\n\n");
}
TODO: use function
}
csharpCode.append("\t}\n");
*/
this.sqlScript.append("\n/* TODO: foreign keys-#################################################\n");
return csharpCode.toString();
}
public StringBuffer create_CS_Script() throws ZZ20 {
this.databaseName = T3.replaceSpecialChars(this.databaseName.toLowerCase());
sqlScript = new StringBuffer();
sqlScript.append("using Microsoft.EntityFrameworkCore;\n");
sqlScript.append("public partial class DataBase: DbContext {\n\n\tpublic DataBase(){}\n\n\tpublic DataBase(DbContextOptions<DataBase> options) : base(options) {}\n\n");
/*
sqlScript.append("\tprotected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlite(\"Data Source=")
.append(this.databaseName)
.append(".db\");\n");
sqlScript.append("\n\t//foreign keys-#################################################\n");
StringBuilder foreignKeyBuilder = new StringBuilder();
for (T1 table : this.tables) {
ArrayList<C3> fkColumns = new ArrayList<>();
@ -485,7 +449,7 @@ public class C4 {
}
if (fkColumns.size() == 0)
continue;
this.sqlScript = this.sqlScript.append("alter table ").append(table.getTablename()).append("\n");
foreignKeyBuilder.append("alter table ").append(table.getTablename()).append("\n");
HashSet<String> tableNamesInfkColumns = new HashSet<>();
@ -504,8 +468,8 @@ public class C4 {
}
}
for (C3 col : equalColumnsBecauseRecursive) {
this.sqlScript.append("add foreign key (");
this.sqlScript = this.sqlScript.append(col.getColumnName()).append(")").append(" references ").append(col.getReferencesTo().tablename()).append("(").append(col.getReferencesTo().columnname()).append(")").append(" on delete restrict on update restrict,\n");
foreignKeyBuilder.append("add foreign key (");
foreignKeyBuilder.append(col.getColumnName()).append(")").append(" references ").append(col.getReferencesTo().tablename()).append(" (").append(col.getReferencesTo().columnname()).append(")").append(" on delete restrict on update restrict,\n");
tableNamesInfkColumns.remove(col.getReferencesTo().tablename());
}
@ -513,9 +477,9 @@ public class C4 {
for (String tableName : tableNamesInfkColumns) {
this.sqlScript.append("add foreign key (");
foreignKeyBuilder.append("add foreign key (");
StringBuilder columnsOrig = new StringBuilder();
StringBuilder refColumns = new StringBuilder(" references " + tableName + "(");
StringBuilder refColumns = new StringBuilder(" references " + tableName + " (");
for (C3 fkcolumn : fkColumns) {
if (tableName.equals(fkcolumn.getReferencesTo().tablename())) {
columnsOrig.append(fkcolumn.getColumnName()).append(",");
@ -526,14 +490,75 @@ public class C4 {
columnsOrig.append(")");
refColumns = new StringBuilder(refColumns.substring(0, refColumns.length() - 1));
refColumns.append(")");
this.sqlScript.append(columnsOrig).append(refColumns).append(" on delete restrict on update restrict,\n");
foreignKeyBuilder.append(columnsOrig).append(refColumns).append(" on delete restrict on update restrict,\n");
}
this.sqlScript.replace(this.sqlScript.length() - 2, this.sqlScript.length(), ";\n");
foreignKeyBuilder.replace(foreignKeyBuilder.length() - 2, foreignKeyBuilder.length(), ";\n");
}
sqlScript.append(convertSqlToCSharp(foreignKeyBuilder.toString()));
*/
sqlScript.append("}\n");
sqlScript.append("// tables-#################################################\n");
for (T1 table : this.tables) {
if(table.getSkjdfhgdskjf674534().size() > 0) {
sqlScript = sqlScript.append("[Table(\"").append(table.getTablename()).append("\")]\n");
sqlScript = sqlScript.append("public class ").append(table.getTablename().substring(table.getTablenamePraefix().length())).append(" {").append("\n");
StringBuilder constructorbuilder = new StringBuilder("public ").append(table.getTablename().substring(table.getTablenamePraefix().length())).append("(");
StringBuilder innerconstructorbuilder = new StringBuilder();
for (C3 column : table.getSkjdfhgdskjf674534()) {
System.out.println(column.getColumnName()+"\t"+sqltoCSType(column.getDatatype()));
String shortcolumnname = shortname(column.getColumnName());
sqlScript.append(addChars())
.append(column.isKey() ? ("[Key]\n"+addChars()) : "")
.append("[Column(TypeName=\"")
.append(column.getDatatype())
.append("\")]\n")
.append(addChars())
.append(!column.isNullable() ? "[Required]\n"+addChars() : "")
.append(column.isUnique()?"[Index(\""+column.getColumnName()+"Index\", IsUnique = true)]\n"+addChars():"")
.append(column.isAutoincrement()?"[DatabaseGenerated(DatabaseGeneratedOption.Identity)]\n"+addChars():"");
if(column.getReferencesTo() != null) {
sqlScript.append("[ForeignKey(\"").append(shortname(table.getTablename())).append(shortcolumnname).append("-").append(shortname(column.getReferencesTo().tablename())).append(shortname(column.getReferencesTo().columnname())).append("\")]\n").append(addChars());
//[ForeignKey("Co_Department")]
//[InverseProperty("De_Courses")]
}
this.sqlScript.append("*/");
sqlScript.append("public ").append(sqltoCSType(column.getDatatype()))
.append(" ")
.append(shortcolumnname)
.append(" { get; ")
.append(column.isKey()?"private ": "")
.append("set; }\n");
return this.sqlScript;
if(column.isKey())continue;
constructorbuilder.append(sqltoCSType(column.getDatatype()))
.append(" ").append(shortcolumnname).append(", ");
innerconstructorbuilder.append(addChars()).append(addChars()).append("this.").append(shortcolumnname).append("=").append(shortcolumnname).append(";\n");
}
constructorbuilder.delete(constructorbuilder.length()-2,constructorbuilder.length());
constructorbuilder.append(") {\n").append(innerconstructorbuilder).append(addChars()).append("}\n");
sqlScript.append("\n");
if(table.getKeyColumns().size()!=table.getSkjdfhgdskjf674534().size())
sqlScript.append(addChars()).append(constructorbuilder); //no constructor for tables with only keys
sqlScript.append(addChars()).append("public ").append(table.getTablename().substring(table.getTablenamePraefix().length())).append("(){}\n");
sqlScript.append("}\n\n");
}
}
//sqlScript.append("*/");
return sqlScript;
}