Designfrage: Setter -> return *this?
-
Ad aCTa schrieb:
Mir fällt da immer wieder SQL als Beispiel ein:
sql_ressource sql("www.my_sql_server.com"); std::vector<std::string> result = sql.select("*").from("users").where("client_id").equals(45).asc();Hi,
darf ich fragen aus welchem wrapper oder gar library/framework der Ausschnitt stammt.
Sieht nämlich ganz interessant aus.
Gruß Gate.
-
Gate schrieb:
Ad aCTa schrieb:
Mir fällt da immer wieder SQL als Beispiel ein:
sql_ressource sql("www.my_sql_server.com"); std::vector<std::string> result = sql.select("*").from("users").where("client_id").equals(45).asc();Hi,
darf ich fragen aus welchem wrapper oder gar library/framework der Ausschnitt stammt.
Sieht nämlich ganz interessant aus.
Gruß Gate.Ja, vor allem wenn man sich die Alternative anschaut, so einen SQL-String selber tippen zu müssen. Ich habs eben Testhalber für obige Abfrage mal gemacht und war überrascht.
-
Wie sieht dann sowas aus?
select name from employee where employeeID not in (select employeeID from assignment)
-
hhhhmmmm schrieb:
Wie sieht dann sowas aus?
select name from employee where employeeID not in (select employeeID from assignment)Vielleicht
select("name").from("employee").where("employeeID").notIN(sql.select("employeeED").from("assignment"));
-
Es könnte so aussehen.
sql.select("name") .from("employee") .where("employeeID").notin() .select("employeeID") .from("assignment")
-
Verhinder der Compiler dann sowas?
sql.where("dfs").select("*").equal("dsfsfs").from("f");Oder wird das sogar noch "richtig" ausgeführt?
-
hhhhmmmm schrieb:
Verhinder der Compiler dann sowas?
sql.where("dfs").select("*").equal("dsfsfs").from("f");Oder wird das sogar noch "richtig" ausgeführt?
Wie soll der Compiler es verhindern? Es sind nur Strings. Wenn es falsch Information kommt es dann zur ein Fehler.
-
hhhhmmmm schrieb:
Verhinder der Compiler dann sowas?
sql.where("dfs").select("*").equal("dsfsfs").from("f");Oder wird das sogar noch "richtig" ausgeführt?
Der Biblitheksschreiber kann es verhindern, muß es aber nicht verhindern.
Normalerweise wird er es verhindern mit den selben Mitteln mit denen er zum Beispiel vergessene From-Clauses verhindert.
-
Naja, wenn es einen Compileerror geben würde, wäre es natürlich schon praktisch, aber dann müsste select() nicht sql_ressource sondern was anderes zurück geben und das könnte sehr aufwendig werden für den Biblitheksschreiber. Man kann natürlich auch zur Laufzeit eine Exception werfen, aber dann kann ich das Statement auch so hinschreiben.
-
Mit genügend Aufwand, kann man das durchaus schaffen

-
So viel Aufwand wäre das vielleicht gar nicht. Man müsste sich einige Zwischenklassen ausdenken, welche Funktionen mit passendem Rückgabetyp bereitstellen. Ich meine, falls man den Fehler zur Laufzeit abfangen will, muss man auch nicht gerade wenig Code schreiben. Möglicherweise ist der sogar komplizierter.
Aber kann auch sein, dass ich das völlig falsch einschätze, es ist mehr eine spontane Vermutung.
-
Schwierig könnte es werden, wenn bestimmte Sachen nur in nem größeren Kontext erlaubt sind.