M
Mart
Gast
Also ich versuch jetzt eine Zweite Bibliothek zu schreiben der einzige sinn von dem Sollte es sein im moment ein einfaches Select zu bauen möglichst ohne strings
Grund dafür ist es ... ich musste in Laravel einen tabellen namen ändern und einen Controller umbenennen es war einfach eine Katsatrophe... gefühlt "good luck finde die strings" es kann doch net sei dass alles nur über strings funktioniert ?
Ich hättte jetzt einen ansatz über enums versucht um mal Typos zu vermeiden und den String quatsch ,ich weis man kann tabellen hardcoden ewil sie sich realtiv wenig oft vom Tabellen namen ändern aber wenn sie sich ändern und man alle strings finden muss spürt man wie verzweiflung durch den Körper fließt...
z.b. ich hab nur eine einzelne Tabelle , der Enum name ist der tabellen name, die werte sind die Spalten namen
jetzt ist das ziel ein einfaches Statement zu bauen
select * hab ich mal gehört dass man es nicht verwenden sollte ... und im plsql editor ist es die einzige autovervollständigung die immer funktioniert dass man diese auflöst in alle Spalten namen alsoooooo gibts für mich den spezial fall nicht
jetzt ist es ziel das zu erreichen, das füllen des prepared Statements seh ich im moment auch noch nicht als mein Problem
soweit so gut
jetzt zu dem Problematischen
ich habe es mit einer FluentApi oder Builder API umgesetzt ... keine ahnung ist (denke ich ) auch nicht wichtig
wo ich einfach mal den select buaen will und über query "theoretisch" das statement ausgeben will
die Implementation wäre hierbei dann die Statement Klasse
diese sollte einfach die Teile von select from where zusammen basteln
die statement Teile kann ich ja aufteilen
und das select statement
und das selection statement ist ein teil des trauer spiels , ich weis nicht wie ich es sonst zusammen bauen sollte ohne strings bzw maximal wenig strings , wie kann ich davon weg kommen?
ich weis nicht wie ich die leerzeichen und die Kommas und den Aufbau umändern kann
im prinzip ist der select immer gleich
es gibt nur diese zwei fälle wenn man die spezial fälle mit count min und max weg lässt
Grund dafür ist es ... ich musste in Laravel einen tabellen namen ändern und einen Controller umbenennen es war einfach eine Katsatrophe... gefühlt "good luck finde die strings" es kann doch net sei dass alles nur über strings funktioniert ?
Ich hättte jetzt einen ansatz über enums versucht um mal Typos zu vermeiden und den String quatsch ,ich weis man kann tabellen hardcoden ewil sie sich realtiv wenig oft vom Tabellen namen ändern aber wenn sie sich ändern und man alle strings finden muss spürt man wie verzweiflung durch den Körper fließt...
z.b. ich hab nur eine einzelne Tabelle , der Enum name ist der tabellen name, die werte sind die Spalten namen
Java:
public enum User {
NAME,PASSWORD;
}
select * hab ich mal gehört dass man es nicht verwenden sollte ... und im plsql editor ist es die einzige autovervollständigung die immer funktioniert dass man diese auflöst in alle Spalten namen alsoooooo gibts für mich den spezial fall nicht
jetzt ist es ziel das zu erreichen, das füllen des prepared Statements seh ich im moment auch noch nicht als mein Problem
Java:
PreparedStatement statement = new Statement<User>()
.SELECT(User.NAME, User.PASSWORD)
.FROM(User.class)
.QUERY();
jetzt zu dem Problematischen
ich habe es mit einer FluentApi oder Builder API umgesetzt ... keine ahnung ist (denke ich ) auch nicht wichtig
wo ich einfach mal den select buaen will und über query "theoretisch" das statement ausgeben will
Java:
public interface FLuentSQL {
interface SELECTOR<ROW extends Enum<?>> {
EXECUTOR SELECT(ROW... rowsToSelect);
}
interface EXECUTOR {
void QUERY();
}
}
Java:
public class Statement<ROW extends Enum<?>> implements FLuentSQL.SELECTOR<ROW>, FLuentSQL.EXECUTOR {
private StringBuilder statement = new StringBuilder();
public Statement () {
}
@Override
public void QUERY() {
System.out.println("QUERY => "+statement);
}
@Override
public Statement<ROW> SELECT(ROW... rowsToSelect) {
if(rowsToSelect == null || rowsToSelect.length == 0)
throw new RapidfxRuntimeException("Rows sind grampf");
var selection = new SelectionStatement();
selection.createSelectionStatement(rowsToSelect);
statement.append(selection.get());
return this;
}
}
die statement Teile kann ich ja aufteilen
Java:
public abstract class StatementPart {
protected StringBuilder statement = new StringBuilder();
public abstract String get();
}
Java:
public class SelectionStatement<ROW extends Enum<?>> extends StatementPart {
public String get() {
return statement.toString();
}
public void createSelectionStatement(ROW... rowsToSelect) {
statement.append(DBPART.SELECT);
statement.append(space());
appendExtraSelection(rowsToSelect);
}
private String space() {
return " ";
}
private void appendExtraSelection(ROW... rowsToSelect) {
var firstRow = rowsToSelect[0];
appendSelection(firstRow);
for (int i = 1; i < rowsToSelect.length; i++) {
var nextRow = rowsToSelect[i];
statement.append(" , ");
appendSelection(nextRow);
}
}
private void appendSelection(ROW rowsToSelect) {
var firstRow = Objects.requireNonNull(rowsToSelect);
if (firstRow != null) {
statement.append(firstRow);
}
}
}
und das selection statement ist ein teil des trauer spiels , ich weis nicht wie ich es sonst zusammen bauen sollte ohne strings bzw maximal wenig strings , wie kann ich davon weg kommen?
ich weis nicht wie ich die leerzeichen und die Kommas und den Aufbau umändern kann
im prinzip ist der select immer gleich
Java:
SELECT
leerzeichen
arg1
komma
arg2
bzw
SELECT
leerzeichen
arg1