diff --git a/app.py b/app.py index ed09446..353c761 100644 --- a/app.py +++ b/app.py @@ -471,17 +471,53 @@ def delete_exercise(exercise_id): @app.route("/sql_explorer", methods=['GET']) def sql_explorer(): + saved_queries = db.sql_explorer.list_saved_queries() if htmx: - return render_block(app.jinja_env, 'sql_explorer.html', 'content') - return render_template('sql_explorer.html') + return render_block(app.jinja_env, 'sql_explorer.html', 'content', saved_queries=saved_queries) + return render_template('sql_explorer.html', saved_queries=saved_queries) @app.route("/sql_query", methods=['POST']) def sql_query(): query = request.form.get('query') - (results, columns, error) = db.sql_explorer.execute_sql(query) - - return render_template('partials/sql_explorer/sql_query.html', query=query, results=results, columns=columns, error=error) + action = request.form.get('action') + title = request.form.get('title') + if action == 'execute': + (results, columns, error) = db.sql_explorer.execute_sql(query) + saved_queries = db.sql_explorer.list_saved_queries() + return render_template('partials/sql_explorer/sql_query.html', + title=title, + query=query, + results=results, + columns=columns, + error=error, + saved_queries=saved_queries) + else: + error = db.sql_explorer.save_query(title, query) + saved_queries = db.sql_explorer.list_saved_queries() + return render_template('partials/sql_explorer/sql_query.html', + title=title, + query=query, + error=error, + saved_queries=saved_queries) + +@app.route('/load_sql_query/', methods=['GET']) +def load_sql_query(query_id): + (title, query) = db.sql_explorer.get_saved_query(query_id) + saved_queries = db.sql_explorer.list_saved_queries() + return render_template('partials/sql_explorer/sql_query.html', + title=title, + query=query, + saved_queries=saved_queries) + +@app.route('/delete_sql_query/', methods=['DELETE']) +def delete_sql_query(query_id): + db.sql_explorer.delete_saved_query(query_id) + saved_queries = db.sql_explorer.list_saved_queries() + return render_template('partials/sql_explorer/sql_query.html', + title="", + query="", + saved_queries=saved_queries) @ app.route("/sql_schema", methods=['GET']) diff --git a/features/sql_explorer.py b/features/sql_explorer.py index 8bb1081..f1ad6b6 100644 --- a/features/sql_explorer.py +++ b/features/sql_explorer.py @@ -107,5 +107,31 @@ class SQLExplorer: error = str(e) return (results, columns, error) + + def save_query(self, title, query): + error = None + + if not title: + return "Must provide title" + + try: + self.execute(""" + INSERT INTO saved_query (title, query) + VALUES (%s, %s)""",[title, query], commit=True) + except Exception as e: + error = str(e) + + return error + + def list_saved_queries(self): + queries = self.execute("SELECT id, title, query FROM saved_query") + return queries + + def get_saved_query(self, query_id): + result = self.execute("SELECT title, query FROM saved_query where id=%s", [query_id], one=True) + return (result['title'], result['query']) + + def delete_saved_query(self, query_id): + self.execute("DELETE FROM saved_query where id=%s", [query_id], commit=True) diff --git a/templates/partials/sql_explorer/sql_query.html b/templates/partials/sql_explorer/sql_query.html index 02495b3..cfa8687 100644 --- a/templates/partials/sql_explorer/sql_query.html +++ b/templates/partials/sql_explorer/sql_query.html @@ -6,10 +6,50 @@ {% endif %}
- - + +
+ + +
+ +
+ + +
+ + +
+ + + + + +
+
@@ -35,4 +75,67 @@ {% endif %}
+ +
+

Saved Queries

+ {% if saved_queries %} +
+ + + + + + + + + {% for saved in saved_queries %} + + + + + {% endfor %} + +
+ Title + Actions
{{ saved.title }} + +
+
+ {% else %} +

No saved queries found.

+ {% endif %} +
+ + \ No newline at end of file diff --git a/templates/sql_explorer.html b/templates/sql_explorer.html index e79ee6d..a3c02ab 100644 --- a/templates/sql_explorer.html +++ b/templates/sql_explorer.html @@ -11,7 +11,7 @@
- {{ render_partial('partials/sql_explorer/sql_query.html') }} + {{ render_partial('partials/sql_explorer/sql_query.html', saved_queries=saved_queries) }}