diff --git a/panoramix/models.py b/panoramix/models.py index f893acca180db..1a5b074c5f97e 100644 --- a/panoramix/models.py +++ b/panoramix/models.py @@ -269,9 +269,13 @@ def sqlalchemy_uri_decrypted(self): conn.password = self.password return str(conn) + @property + def sql_url(self): + return '/panoramix/sql/{}/'.format(self.id) + @property def sql_link(self): - return 'SQL'.format(self.id) + return 'SQL'.format(self.sql_url) class SqlaTable(Model, Queryable, AuditMixinNullable): @@ -449,6 +453,14 @@ def query_bkp( return QueryResult( df=df, duration=datetime.now() - qry_start_dttm, query=sql) + @property + def sql_url(self): + return self.database.sql_url + "?table_id=" + str(self.id) + + @property + def sql_link(self): + return 'SQL'.format(self.sql_url) + def query( self, groupby, metrics, granularity, diff --git a/panoramix/static/panoramix.js b/panoramix/static/panoramix.js index ff4f24d1889b7..679ea47c83784 100644 --- a/panoramix/static/panoramix.js +++ b/panoramix/static/panoramix.js @@ -468,6 +468,7 @@ var px = (function() { editor.setValue(msg); }); }); + $("#select_star").click(); $("#run").click(function() { $('#results').hide(0); $('#loading').show(0); diff --git a/panoramix/templates/panoramix/sql.html b/panoramix/templates/panoramix/sql.html index 75d480229ced2..3cde931755fd2 100644 --- a/panoramix/templates/panoramix/sql.html +++ b/panoramix/templates/panoramix/sql.html @@ -18,6 +18,10 @@ border-radius: 5px; background-color: #EEE; } + div.alert { + padding: 5px; + margin: 0px; + } .metadata { overflow: auto; width: 300px; @@ -36,6 +40,7 @@ #results { overflow: auto; font-size: 12px; + margin-bottom: 5px; } #results table tbody tr td{ padding: 2px 4px; @@ -56,7 +61,10 @@

db: [{{ db }}]

diff --git a/panoramix/views.py b/panoramix/views.py index 6b1ac686918a6..bf174e845dc2b 100644 --- a/panoramix/views.py +++ b/panoramix/views.py @@ -146,7 +146,8 @@ def pre_update(self, db): class TableView(PanoramixModelView, DeleteMixin): datamodel = SQLAInterface(models.SqlaTable) - list_columns = ['table_link', 'database', 'changed_by', 'changed_on_'] + list_columns = [ + 'table_link', 'database', 'sql_link', 'changed_by_', 'changed_on_'] add_columns = ['table_name', 'database', 'default_endpoint', 'offset'] edit_columns = [ 'table_name', 'is_featured', 'database', 'description', 'owner', @@ -278,7 +279,7 @@ class DatasourceModelView(PanoramixModelView, DeleteMixin): list_columns = [ 'datasource_link', 'cluster', 'owner', 'created_by', 'created_on', - 'changed_by', 'changed_on', + 'changed_by_', 'changed_on', 'offset'] related_views = [ColumnInlineView, MetricInlineView] edit_columns = [ @@ -561,6 +562,7 @@ def sql(self, database_id): return self.render_template( "panoramix/sql.html", database_id=database_id, + table_id=request.args.get('table_id'), db=mydb) @has_access @@ -579,7 +581,7 @@ def select_star(self, table_id): t = db.session.query(models.SqlaTable).filter_by(id=table_id).first() fields = ", ".join( [c.column_name for c in t.columns if not c.expression] or "*") - s = "SELECT\n{fields}\nFROM {t.table_name}\nLIMIT 1000".format(**locals()) + s = "SELECT\n{fields}\nFROM {t.table_name}".format(**locals()) return self.render_template( "panoramix/ajah.html", content=s) @@ -608,12 +610,18 @@ def runsql(self): .limit(limit) ) sql= str(qry.compile(eng, compile_kwargs={"literal_binds": True})) - df = read_sql_query(sql=sql, con=eng) - content = df.to_html( - index=False, - classes=( - "dataframe table table-striped table-bordered " - "table-condensed sql_results")) + try: + df = read_sql_query(sql=sql, con=eng) + content = df.to_html( + index=False, + classes=( + "dataframe table table-striped table-bordered " + "table-condensed sql_results")) + except Exception as e: + content = ( + '
' + "{}
" + ).format(e.message) session.commit() return content