Mittel 0 gelöst 0% Erfolgsquote

SQL Query Builder

Assemble a SQL query from parts given in any order, the way a builder object collects settings step by step.

Das lernst du

  • Collect parts in any order before building
  • Apply defaults for missing parts
  • Assemble a result in a fixed format

Problem

Übersetzung anzeigen

The builder pattern constructs a complex object step by step and produces the final result at the end, so callers can set the parts in any order.

Each part is a keyword, a space, and its text:

  • select <columns>: comma-separated column names (spaces around commas may vary). Optional; the default is *.
  • from <table>: required.
  • where <condition>, order <columns>, limit <n>: optional.

If a keyword appears more than once, the last one wins. Build the query in this fixed order, with single spaces:

SELECT <columns> FROM <table>[ WHERE <condition>][ ORDER BY <columns>][ LIMIT <n>]

In the SELECT list, trim each column and join them with , . All other texts are copied unchanged.

Implement query_builder(parts).

Input

parts: The parts, in any order.

Output

Return the SQL query string.

Einschränkungen

1 ≤ number of parts ≤ 20

At least one from part; each part has at most 100 characters

Beispiele

Beispiel 1
Eingabe:
parts = ["where age \u003e 18", "from users", "select name,age"]

Erwartete Ausgabe:
expected = "SELECT name, age FROM users WHERE age \u003e 18"
Eingabe:
std::vector<std::string> parts = {"where age \u003e 18", "from users", "select name,age"};

Erwartete Ausgabe:
std::string expected = "SELECT name, age FROM users WHERE age \u003e 18";
Eingabe:
string[] parts = new string[] {"where age \u003e 18", "from users", "select name,age"};

Erwartete Ausgabe:
string expected = "SELECT name, age FROM users WHERE age \u003e 18";

Erläuterung

The parts arrive out of order, but the query is always built as SELECT … FROM … WHERE …: "SELECT name, age FROM users WHERE age > 18".

Beispiel 2
Eingabe:
parts = ["from orders", "limit 10", "order total DESC"]

Erwartete Ausgabe:
expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10"
Eingabe:
std::vector<std::string> parts = {"from orders", "limit 10", "order total DESC"};

Erwartete Ausgabe:
std::string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";
Eingabe:
string[] parts = new string[] {"from orders", "limit 10", "order total DESC"};

Erwartete Ausgabe:
string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";

Erläuterung

Without a select part the columns default to *: "SELECT * FROM orders ORDER BY total DESC LIMIT 10".

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Store each part by its keyword first; build the text only at the end.

Hinweis 2

A later part with the same keyword replaces the earlier one.

Hinweis 3

Trim each column in the SELECT list and use * when there is no select part.

Erwartete Komplexität

O(total length) time, O(total length) extra space

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.